【问题标题】:NuGet add external referenceNuGet 添加外部引用
【发布时间】:2012-07-26 06:50:19
【问题描述】:

我的项目有一个 .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 pack My.Project.csproj,我会得到 ​​p>

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

我创建了 .\lib .\bin\Debug\lib .\obj\lib

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

【问题讨论】:

    标签: nuget nuget-package


    【解决方案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>
    

    唯一的区别是元数据元素之后的文件元素。

    【讨论】:

    • 除此之外,对我有用的是添加对 self 项目的引用,如 Mustafakidd 所述。
    • 我对 元素必须是 元素的对等部分感到困惑;我试图将 放在 中,但它不喜欢它。仔细重新阅读文件规范,然后再回来查看您的帖子显示了正确的方法。所以要小心; 的对等体
    【解决方案2】:

    我遇到了同样的问题,我是这样解决的。对我来说似乎很奇怪,但它看起来很有效,我不需要以这种方式为我的第三方程序集创建一个 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 包正在创建的程序集添加“引用”节点。我觉得 Matt Ward 的解决方案应该是正确的,但在我添加(冗余)参考节点之前它对我不起作用。

    希望对你有帮助!

    谢谢

    穆斯塔法

    【讨论】:

    • 哇,它对我有用。需要参考当前程序集。谢谢:)
    • 我还需要引用当前程序集。非常感谢 Mustafakidd。
    • 根据文档所说,添加 &lt;references&gt; 元素的行为意味着 lib 文件夹中的程序集将不再作为引用自动添加到目标项目中。通过使用该元素,您表示您要明确指定引用,因此您也必须指定原始程序集。 docs.microsoft.com/en-gb/nuget/schema/…
    • 虽然没有 &lt;references&gt; 元素,但无法解释为什么我在 lib 文件夹中的额外 DLL 不会自动添加为引用...
    • 好的,显然对 lib 文件夹根目录中的 DLL 的支持已被弃用。 docs.microsoft.com/en-gb/nuget/create-packages/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多