我正在使用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文件夹中?
答案 0 :(得分:3)
BuildPackage属性在NuGet.targets文件中定义。当BuildPackage为true时查看NuGet.targets文件,将运行以下命令行:
NuGet.exe pack YourProject.csproj
如果您使用 NuGet.exe打包YourProject.csproj ,则项目的输出程序集将始终添加到lib目录中。查看NuGet源代码,您无法更改此行为,至少在没有修改NuGet的情况下也是如此。
虽然使用 NuGet包YourProject.csproj 将使用它找到的任何您无法在项目本身中定义的额外元数据的YourProject.nuspec文件,但似乎无法阻止输出程序集添加到lib目录。
替代方法是在创建包时仅使用.nuspec文件。使用.nuspec文件,您可以完全控制NuGet包中的内容。
NuGet.exe pack YourManifest.nuspec