NuGet添加外部引用

时间:2012-01-06 20:43:46

标签: nuget nuget-package

我的项目有一个.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>

如果我尝试从包含.csproj和.nuspec文件的目录运行nuget.exe包My.Project.csproj,我会

无效的程序集引用'Third.Party.dll'。确保lib目录中存在名为“Third.Party.dll”的文件。

我创造了 \ LIB \ BIN \调试\ LIB \ OBJ \ lib中

并且文件位于所有三个位置。它真的想要lib文件夹在哪里?

2 个答案:

答案 0 :(得分:36)

&lt; references&gt; element定义安装软件包时将添加到项目的引用。您缺少的是定义包的一部分文件的部分,该文件使用&lt; files&gt;完成。元件。因此,您的.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元素。

答案 1 :(得分:12)

我有同样的问题,这就是我如何解决它。看起来很奇怪,但它看起来很有效,我不需要为我的第三方组装创建一个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复制到目标lib \ net40(在我的情况下)文件夹中。然后我不得不为thirdparty.dll以及这个NuGet包创建的程序集添加“reference”节点。我觉得Matt Ward的解决方案应该是正确的,但是在我添加(冗余)参考节点之前它对我不起作用。

我希望有所帮助!

由于

的Mustafa