我正在建立一个具有如下文件夹层次结构的NuGet包:
ProjectDir
Infrastructure
class1.cs
class2.cs
Task
class3.cs
class3.cs
StuffToInclude
SampleCode
sampleclass1.cs.pp
sampleclass2.cs.pp
Images
image1.gif
image2.gif
Doc
text1.txt
text2.txt
Project.nuspec
请注意,仅使用“ nuget spec”命令即可生成nuspec文件,然后添加以下文件部分:
<files>
<file src="StuffToInclude\**\*.*" target="content" />
</files>
我期望(并希望)的是包装中的内容文件夹,如下所示:
content
SampleCode
sampleclass1.cs.pp
sampleclass2.cs.pp
Images
image1.gif
image2.gif
Doc
text1.txt
text2.txt
但是我得到的是一个稍大的内容文件夹,其中包含“ StuffToInclude”文件夹的第二个副本,如下所示:
content
StuffToInclude
Images
image1.gif
image2.gif
Doc
text1.txt
text2.txt
SampleCode
sampleclass1.cs.pp
sampleclass2.cs.pp
Images
image1.gif
image2.gif
Doc
text1.txt
text2.txt
请注意,不需要的StuffToInclude文件夹中没有SampleCode子文件夹-nuget Packer认为,除非明确要求,否则不应将“ .pp”文件放置在内容中。但是不必要地复制所有其他文件(在所有其他文件夹中),并且不希望将它们放在那里-因为使用该软件包时,该文件夹也在目标项目中也被复制。
我认为也许在nuspec中这样的事情会有所帮助:
<files>
<file src="StuffToInclude\**\*.*" target="content" exclude="StuffToInclude\**\*.*"/>
</files>
但是我为“ exclude”属性尝试过的所有变体似乎都无济于事。
如何从内容文件夹中排除“ StuffToInclude”文件?
非常感谢。
答案 0 :(得分:1)
如何阻止NuGet打包包含不需要的文件
我假设您在创建软件包时使用的命令类似于nuget pack xx.csproj
。
如果是这样,创建.nuspec文件后基于项目文件创建包的特殊原因是什么?
根据this document,我们可以基于指定的nuget pack
使用.nuspec or project file
命令。
通常,如果我们基于.csproj
创建一个包,则无需创建.nuspec
文件。另外,如果我们要基于.nuspec
创建一个包,我建议使用命令nuget pack xx.nuspec
而不是nuget pack xx.csproj
。
问题原因:
我已经进行了一些测试,发现当我们将Project.nuspec
文件放入项目dir并使用诸如nuget pack xx.csproj
这样的命令时,nuget.exe将从两者读取数据 xx.nuspec and xx.csproj
,这就是为什么您需要第二份副本。
nuget pack xx.csproj
,则xx.nuspec
的1#结构:
content
StuffToInclude
Images
image1.gif
image2.gif
Doc
text1.txt
text2.txt
nuget pack xx.nuspec
的2#结构:
content
SampleCode
sampleclass1.cs.pp
sampleclass2.cs.pp
Images
image1.gif
image2.gif
Doc
text1.txt
text2.txt
当您基于存在ProjectName.nuspec的项目文件(.csproj)使用nuget pack
命令时,它将同时从.csproj和.nuspec读取数据。因此它会像您得到的那样产生第二份副本。
要解决此问题:
保留xx.nuspec文件并使用nuget pack xx.nuspec
之类的命令。(建议)
删除xx.nuspec文件(或删除<Files> section
)并使用诸如nuget pack xx.csproj
之类的命令,以将这些xx.cs.pp
文件包含到内容文件夹中,您可能需要设置他们的build action
到content
。
同时保留xx.nuspec文件和xx.csproj文件(请参见下文)以及xx.nuspec文件中所需的所有内容,但要避免不必要的第二件事情,请确保每个单独的项目您不想将两次复制设置为Build Action
中的None
。