NuGet добавляет внешнюю ссылку
У меня есть файл .nuspec для моего проекта, который ссылается на стороннюю DLL, которую должен ссылаться проект, включая мой пакет.
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Locked against log4net 1.2 - less than 1.2.11 which has breaking changes</releaseNotes>
<copyright>Copyright 2012 blah blah</copyright>
<dependencies>
<dependency id="log4net" version="[1.2,1.2.11)" />
<dependency id="My.Other.Project" />
</dependencies>
<references>
<reference file="Third.Party.dll" />
</references>
Если я попытаюсь запустить файл nuget.exe My.Project.csproj из каталога с .csproj и файлом .nuspec, я получаю
Неправильная ссылка на сборку 'Third.Party.dll'. Убедитесь, что файл с именем "Third.Party.dll" существует в каталоге lib.
Я создал
. \Lib
.\Bin\Debug\Lib
. \OBJ\Lib
и файл находится во всех трех местах. Где он ДЕЙСТВИТЕЛЬНО хочет папку lib?
Ответы
Ответ 1
Элемент < references > определяет ссылки, которые будут добавлены в проект при установке вашего пакета. Вам не хватает части, которая определяет файлы, которые являются частью вашего пакета, который выполняется с элементом files > . Поэтому ваш файл .nuspec должен выглядеть примерно так:
<?xml version="1.0"?>
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Locked against log4net 1.2 - less than 1.2.11 which has breaking changes</releaseNotes>
<copyright>Copyright 2012 blah blah</copyright>
<dependencies>
<dependency id="log4net" version="[1.2,1.2.11)" />
<dependency id="My.Other.Project" />
</dependencies>
<references>
<reference file="Third.Party.dll" />
</references>
</metadata>
<files>
<file src="lib\Third.Party.dll" target="lib"/>
</files>
</package>
Единственное отличие - это элемент файлов после элемента метаданных.
Ответ 2
У меня была такая же проблема, и вот как я ее решил. Мне показалось странным, но похоже, что он работает, и мне не нужно создавать пакет nuget для моей сторонней сборки таким образом.
My.nuspec выглядит так:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Some release notes</releaseNotes>
<copyright>Copyright 2012</copyright>
<tags>some,tags</tags>
<references>
<reference file="thirdparty.dll"></reference>
<reference file="ThisAssemblyName.dll"></reference>
</references>
</metadata>
<files>
<file src="web.config.transform" target="content"/>
<file src="lib\net40\thirdparty.dll" target="lib\net40"/>
</files>
</package>
Как вы можете видеть - мне пришлось добавить файл node, чтобы скопировать dll thirdparty в папку target lib\net40 (в моем случае). Затем мне пришлось добавить "ссылочные" узлы как для thirdparty.dll, так и для сборки, которую создавал этот пакет NuGet. Я чувствую, что решение Matt Ward должно быть правильным, но оно не работало для меня, пока я не добавил ссылку (избыточность) node.
Я надеюсь, что это поможет!
Спасибо
Мустафа