NuGet добавить внешнюю ссылку - PullRequest
35 голосов
/ 07 января 2012

У меня есть файл .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 Pack My.Project.csproj из каталога с .csproj и .nuspec файлом, я получаю

Неверная ссылка на сборку «Third.Party.dll».Убедитесь, что в каталоге lib существует файл с именем «Third.Party.dll».

Я создал. \ Lib. \ Bin \ Debug \ lib. \ Obj \ lib

ифайл находится во всех трех местах.Где ДЕЙСТВИТЕЛЬНО нужна папка lib?

Ответы [ 2 ]

36 голосов
/ 11 января 2012

Элемент <<a href="http://docs.nuget.org/docs/reference/nuspec-reference#Specifying_Explicit_Assembly_References" rel="noreferrer"> reference > определяет ссылки, которые будут добавлены в проект при установке пакета. Чего вам не хватает, так это части, которая определяет файлы, являющиеся частью вашего пакета, что делается с помощью элемента <<a href="http://docs.nuget.org/docs/reference/nuspec-reference#Specifying_Files_to_Include_in_the_Package" rel="noreferrer"> 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>

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

12 голосов
/ 26 июля 2012

У меня была такая же проблема, и вот как я ее решил. Мне это показалось странным, но похоже, что это работает, и мне не нужно создавать пакет 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>

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

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

Спасибо

Мустафа

...