Подтвердить что ты не робот

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?

4b9b3361

Ответ 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.

Я надеюсь, что это поможет!

Спасибо

Мустафа