【发布时间】:2014-06-24 08:20:07
【问题描述】:
我正在使用NuGet 2.8.50506.491。我创建了几个 C# 带有自定义 Microsoft Build 任务和帮助函数的项目。有一个目标文件。它看起来像这样。
<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 文件夹中?
【问题讨论】:
-
除非修改 NuGet 源代码,否则使用“nuget pack YourProject.csproj”似乎是不可能的。将项目与 nuget pack 一起使用始终会将输出程序集添加到 lib 目录。如果您更新它以具有正确的元数据,则可以使用“nuget pack YourManifest.nuspec”。
-
奇怪的是,当我在 BuildPackage 属性设置为 true 的情况下构建项目时,似乎正在使用 YourManifest.nuspec。
-
NuGet.exe 将使用 .nuspec 文件获取项目本身可能不支持的额外元数据。但是,当您执行“nuget pack YourProject.csproj”时查看 NuGet 源代码,您的项目输出的 .dll 或 .exe 始终会添加到 lib 目录中。如果不使用“nuget pack YourManifest.nuspec”,似乎没有办法覆盖它。
-
把它放在一个答案中,我会给你功劳。
标签: nuget nuget-spec