nuget - 如何使用 MSBuild 任务和目标文件创建 NuGet 包

标签 nuget nuget-spec

我正在使用 NuGet 2.8.50506.491。我使用自定义 Microsoft Build 任务和辅助函数创建了几个 C# 项目。有一个目标文件。它看起来像这样。

<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>MyTasks</title>
    <authors>Werner Strydom</authors>
    <owners>Werner Strydom</owners>
    <licenseUrl>http://example.org/LICENSE</licenseUrl>
    <projectUrl>http://example.org/</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Sample tasks.</description>
    <releaseNotes>Initial Release</releaseNotes>
    <copyright>Copyright 2014 Werner Strydom</copyright>
  </metadata>
  <files>
    <file src="MyTasks.targets" target="build/net40" />
    <file src="bin\$configuration$\*.dll" target="build/net40" />
    <file src="bin\$configuration$\*.pdb" target="build/net40" />
  </files>
</package>

在 Visual Studio 项目文件中,我将 BuildPackage 属性设置为 true

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{96535580-0000-0000-0000-2843D7EC2767}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>MyTasks</RootNamespace>
    <AssemblyName>MyTasks</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <BuildPackage Condition="'$(BuildPackage)' == ''">true</BuildPackage>
</PropertyGroup>

当我构建项目时,会创建一个 nupkg。我将扩展名更改为 zip 并查看了文件的内容。该项目的输出位于 lib/net40 文件夹中。因此,当我将此包添加到另一个项目时,它还会添加对那些程序集的引用,这是不需要的,因为此包纯粹用于构建。

如何防止项目输出最终出现在 lib 文件夹中?

最佳答案

BuildPackage 属性在 NuGet.targets 文件中定义。当 BuildPackage 为真时查看 NuGet.targets 文件,运行以下命令行:

NuGet.exe pack YourProject.csproj

如果您使用的是 NuGet.exe pack YourProject.csproj,那么您项目的输出程序集始终会添加到 lib 目录中。查看 NuGet 源代码,您无法更改此行为,至少在不修改 NuGet 的情况下无法更改。

虽然使用 NuGet pack YourProject.csproj 将使用它找到的任何 YourProject.nuspec 文件来获取您无法在项目本身中定义的额外元数据,但似乎您无法阻止添加输出程序集到 lib 目录。

另一种方法是在创建包时仅使用 .nuspec 文件。使用 .nuspec 文件,您可以完全控制进入 NuGet 包的内容。

NuGet.exe pack YourManifest.nuspec

关于nuget - 如何使用 MSBuild 任务和目标文件创建 NuGet 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381629/

相关文章:

compiler-errors - VS2017 Nuget 包在编译时复制到 bin\debug 但不是 bin\release

visual-studio - 是一种在 Visual Studio 中重置 nuget 超时的方法吗?

nuget - NuSpec 生成的 NuGet 文件正在解析错误版本的依赖项 - 我如何才能强制它执行其他操作?

visual-studio - Nuget 包 - 引用的程序集不包含在项目引用中

visual-studio - 在从 VS csproj 生成的 NuGet 包中包含第 3 方 DLL

nuget - vsts 将 .net 标准 2 打包成 nuget

push - 405 NuGet 推送中不允许使用方法

tfs - TFS Nugetter 和构建定义的问题