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 пакет Мой.Проект.csproj из каталога с .csproj и the .файл nuspec, я получаю

неверная ссылка на сборку третьего.Вечеринка.в DLL'. Убедитесь, что файл с именем ' Third.Вечеринка.dll " существует в каталоге lib.

Я создал .библиотека .бинотладкиЛиб . objlib

и файл во всех трех местах. Где он действительно хочет папку lib?

2 ответов


этой ссылки> элемент определяет ссылки, которые будут добавлены в проект при установке пакета. То, что вам не хватает, это часть, которая определяет файлы, которые являются частью вашего пакета, который выполняется с помощью файлы> элемент. Так твой .файл 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>

единственное отличие-элемент files после элемента metadata.


У меня была такая же проблема и вот как я ее решал. Мне показалось странным, но похоже, что это работает, и мне не нужно создавать пакет nuget для моей сторонней сборки таким образом.

мой .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>

Как вы можете видеть-мне пришлось добавить узел файла, чтобы скопировать мою библиотеку dll thirdparty в целевую папку lib\net40 (в моем случае). Затем мне пришлось добавить" ссылочные " узлы для обеих сторон.dll, а также сборка, которую создавал этот пакет NuGet. Я почувствуйте, как решение Мэтта Уорда должны правильно, но он не работал для меня, пока я не добавил (избыточный) ссылочный узел.

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

спасибо

Мустафа