我正在为我的程序集创建包但我不想在我的nuget包中包含docs / * .xml文件。我已经尝试了pack命令的-Exclude开关和nuspec文件中files文件的exclude属性,以明确排除这些文件。这些都没有奏效。因此,每次我生成我的nuget包然后通过在目标项目中安装它来测试它时,它总是添加一个包含所有xml文件的docs文件夹。如何避免将xml文件包含在nuget包中?任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
谢谢Matt,我已经做了你提到的事情,但在我看来,Nuget按惯例做了其他一些事情。即使我像你说的那样使用了排除,也包含了docs文件夹。我通过使用-a开关生成nuspec文件解决了这个问题(我使用的是.csproj文件)。我还必须将.dll文件复制到我的解决方案文件夹之外的文件夹中。这样一切都运行良好,如预期的那样。
无论如何,你的答案是准确的,但在我的情况下它没有用。不确定这是否符合设计要求。 这是我目前用于生成包的最终msbuild文件。希望Nuget很快就会在spec命令中添加更多开关,这样我们就不必在之后修改nuspec文件了。
<Project DefaultTargets="NugetPackage" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<OutputPathCore>NugetPkgs\$(Configuration)\My.Assembly</OutputPathCore>
<NuGetExePath>assets\nuget.exe</NuGetExePath>
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>
<Target Name="NugetPackage" DependsOnTargets="PackageClean;BuildNugetPackageMyAssembly">
<Target Name="PackageClean">
<RemoveDir Directories ="NugetPkgs\$(Configuration)" ContinueOnError ="true"/>
<Target Name="BuildNugetPackageMyAssembly">
<MakeDir Directories="$(OutputPathCore)" />
<MakeDir Directories="$(OutputPathCore)\Package" />
<MakeDir Directories="$(OutputPathCore)\lib\net40" />
<MakeDir Directories="$(OutputPathCore)\lib\net20" />
<MakeDir Directories="$(OutputPathCore)\lib\net20-cf" />
<Copy
DestinationFolder="$(OutputPathCore)\lib\net40"
SourceFiles="Source\My.Assembly\bin\$(Configuration)\My.Assembly.dll" />
<Copy
DestinationFolder="$(OutputPathCore)\lib\net20"
SourceFiles="VS2008\Source\My.Assembly\bin\$(Configuration)\My.Assembly.dll" />
<Copy
DestinationFolder="$(OutputPathCore)\lib\net20-cf"
SourceFiles="VS2008\Source\My.Assembly.CF\bin\$(Configuration)\My.Assembly.CF.dll" />
<Copy DestinationFolder="$(OutputPathCore)\content" SourceFiles="CHANGES" />
<Copy SourceFiles="Release Notes.txt" DestinationFiles="$(OutputPathCore)\Readme.txt" />
<Exec Command=""$(NuGetExePath)" spec -a "$(OutputPathCore)\lib\net40\My.Assembly.dll"" />
<XmlUpdate Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" XmlFileName="My.Assembly.nuspec" XPath="//package/metadata/licenseUrl" Value="http://someurl" />
<XmlUpdate Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" XmlFileName="My.Assembly.nuspec" XPath="//package/metadata/projectUrl" Value="http://someurl" />
<XmlUpdate Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" XmlFileName="My.Assembly.nuspec" XPath="//package/metadata/iconUrl" Value="http://somenice.png" />
<XmlUpdate Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" XmlFileName="My.Assembly.nuspec" XPath="//package/metadata/tags" Value="My.Assembly" />
<XmlUpdate Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" XmlFileName="My.Assembly.nuspec" XPath="//package/metadata/releaseNotes" Value="Review readme.txt for details." />
<ItemGroup>
<file Include="Source\My.Assembly\bin\$(Configuration)\My.Assembly.dll"/>
<file Include="VS2008\Source\My.Assembly\bin\$(Configuration)\My.Assembly.dll"/>
<file Include="$(OutputPathCore)\Readme.txt"/>
</ItemGroup>
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement" File="My.Assembly.nuspec" Element="dependencies" XPath="//package/metadata/dependencies" />
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="AddElement" File="My.Assembly.nuspec" Key="" Value="" Element="files" XPath="//package" InsertAfterXPath="//package" />
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="AddElement" File="My.Assembly.nuspec" Key="src" Value="%(file.Identity)" Element="file" XPath="//package/files" />
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="AddAttribute" File="My.Assembly.nuspec" XPath="//package/files/*[1]" Key="target" Value="lib\net40" />
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="AddAttribute" File="My.Assembly.nuspec" XPath="//package/files/*[2]" Key="target" Value="lib\net20" />
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="AddAttribute" File="My.Assembly.nuspec" XPath="//package/files/*[3]" Key="target" Value=""/>
<Exec Command=""$(NuGetExePath)" pack My.Assembly.nuspec -OutputDirectory "$(OutputPathCore)\Package" -NoPackageAnalysis" />
<Delete Files ="My.Assembly.nuspec" />
答案 1 :(得分:0)
要排除所有.xml文件,您应该使用** \ * .xml通配符。我猜你正在使用* .xml,这将无法正常工作。
要排除所有.xml文件,您可以使用类似于以下内容的nuget命令行:
nuget.exe pack MyPackage.nuspec -Exclude **\*.xml
如果您只需要在docs目录中排除.xml文件,那么您可以使用类似于以下内容的nuget命令行:
nuget.exe package MyPackage.nuspec -Exclude **\docs\*.xml
通配符似乎相对于.nuspec文件所在的文件夹有效。如果相对于.nuspec文件的docs子文件夹中有.xml文件,那么如果docs * .xml也可以使用通配符。
答案 2 :(得分:0)
我能想到的另一件事是
&LT;文件&GT; &lt; file src =“bin \ Debug \ * .dll”target =“lib”/&gt; &lt; file src =“bin \ Debug \ * .pdb”target =“lib”/&gt; &lt; file src =“tools \ * \ 。*”exclude =“* \ .log”/&gt; &LT; /文件&GT;
3. pack命令可以在构建时完成。
有关文件的更多详情,请访问http://docs.nuget.org/docs/reference/nuspec-reference