【问题标题】:Install NuGet package without adding any references in Visual Studio安装 NuGet 包而不在 Visual Studio 中添加任何引用
【发布时间】:2018-02-08 14:31:12
【问题描述】:

我需要使用不应在 Visual Studio 中直接引用的 DLL 创建 NuGet 包。这个想法是让它们在构建期间最终位于某种bin 文件夹中,因为它们将在运行时被其他程序集隐式调用。

我能找到的最佳解决方案是在包中添加一个我计划引用的 DLL,以便引用它而其他 DLL 不被引用 (source):

<references>
    <reference file="OnlyTheFileIWantReferenced.dll" />
</references>

但理想情况下,我想在没有上述解决方法的情况下找到一种方法,我确信在我缺少的 .nuspec 文件中肯定会有某种指令。

【问题讨论】:

    标签: visual-studio nuget nuget-package


    【解决方案1】:

    安装 NuGet 包而不在 Visual Studio 中添加任何引用

    为此,您可以将 dll 文件定位到 tools 文件夹,而不是 .nupsec 文件中的 lib 文件夹:

      <files>
        <file src="bin\Debug\Unreference.dll" target="Tools\Unreference.dll" />
      </files>
    

    以下是我的.nuspec 文件:

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>MyModels</id>
        <version>1.0.0</version>
        <authors>Tester</authors>
        <owners>Tester</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package description</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2018</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
      <files>
        <file src="bin\Debug\MyModels.dll" target="lib\Net45" />
        <file src="bin\Debug\Unreference.dll" target="Tools\Unreference.dll" />
      </files>
    </package>
    

    打包这个.nuspec后,我们会得到nuget包:

    然后将这个包安装到项目中,MyModels.dll会被添加到Reference中,而Unreference.dll不会,这个dll文件存在于packages文件夹:packages\MyModels.1.0.0\Tools中,可以隐式调用也可以通过构建事件或 msbuild 复制任务将其复制到某种 bin 文件夹。

    希望这会有所帮助。

    【讨论】:

    • 感谢@Leo,此解决方案是否需要引用至少一个文件?为了更清楚,如果我有一个没有任何引用的 NuGet 包,这会起作用吗?
    • @globetrotter, will this work if I have a NuGet package with nothing referenced?--是的,它仍然有效。只需删除 .nuspec 文件中的这一行 &lt;file src="bin\Debug\MyModels.dll" target="lib\Net45" /&gt;。
    • 感谢@Leo,我已经投了赞成票,我会在测试后立即将其标记为答案。
    • @globetrotter,对您有帮助吗?有关此问题的任何更新?
    • 大家好。看起来在 Tools 中打包未引用的程序集与在 .nuspec 中显式添加引用具有相同的效果,就像 @globetrotter 所做的那样。复制到 bin/debug 的唯一 dll 是引用的。所有其他人都在 packages\ 文件夹中,但不会复制到 bin/。是使用构建后事件添加它们的唯一方法吗?谢谢。
    猜你喜欢
    • 2017-12-21
    • 2017-04-02
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多