2012-11-25 83 views
2

我正在爲我的程序集創建程序包,但我不'想在我的nuget包中包含docs/*。xml文件。我試過nuspec文件中pack命令的-Exclude開關和files部分的exclude屬性以明確排除這些文件。這些都沒有奏效。所以每次我生成我的Nuget包,然後通過在目標項目中安裝它來測試它時,它總是添加一個包含所有xml文件的docs文件夾。我該如何避免xml文件包含在nuget包中?任何幫助將不勝感激。如何在使用nuget包時避免生成xml文檔

回答

1

謝謝馬特,我已經在做你提到的,但在我看來,Nuget按照慣例做了其他的事情。即使我使用排除,就像你說的docs文件夾被包括在內。我通過使用-a開關(使用我的.csproj文件)生成nuspec文件來解決問題。我還必須將.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="&quot;$(NuGetExePath)&quot; spec -a &quot;$(OutputPathCore)\lib\net40\My.Assembly.dll&quot;" />    

    <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="&quot;$(NuGetExePath)&quot; pack My.Assembly.nuspec -OutputDirectory &quot;$(OutputPathCore)\Package&quot; -NoPackageAnalysis" /> 

<Delete Files ="My.Assembly.nuspec" /> 

0

要排除所有的.xml文件,您應該使用** \ *。xml通配符。我猜你正在使用* .xml,這是行不通的。

要排除所有.xml文件,你可以使用類似如下的的NuGet命令行:

nuget.exe pack MyPackage.nuspec -Exclude **\*.xml 

如果你只需要排除.xml文件docs目錄中,那麼你可以使用的NuGet命令行類似以下內容:

nuget.exe package MyPackage.nuspec -Exclude **\docs\*.xml 

通配符似乎相對於你的.nuspec文件in.So如果你有相對.nuspec文件中的文檔的子文件夾的.xml文件,然後通配符的文件夾來工作如果docs * .xml應該也可以。

0

我能想到的另一件事是

  1. 創建nuspec文件並對其進行編輯。這隻需要做一次(可以檢入)。你在編譯的時候編輯nuspec文件的原因是什麼?在nuspec文件
  2. 使用的文件元素的文件

<文件> <文件SRC =複製到目標文件夾的 「bin \調試\ *。dll的」 TARGET = 「LIB」/> <文件SRC = 「斌\調試\ *。PDB」目標= 「LIB」/> <文件SRC = 「工具\ * \。*」 排除= 「* \ .LOG」/> < /文件>

3.包命令可以保持在編譯的時候做。

更多詳細信息的文件可以在這裏找到http://docs.nuget.org/docs/reference/nuspec-reference

+0

感謝您的建議迪帕克,但我有不同的版本,我組裝的,所以我想使nuspec文件創建後每個這些版本。 – gab

相關問題