Nuget文件被打包到错误的位置

Nuget文件被打包到错误的位置,nuget,nuget-package,nuspec,Nuget,Nuget Package,Nuspec,我有一个nuget规范文件,其中包含文件规范: <files> <file src="content\App_Start\*" target="content\App_Start" /> <file src="content\Views\*" target="content\Views" /> <file src="content\web.config.transform" target="content" />

我有一个nuget规范文件,其中包含文件规范:

   <files>
     <file src="content\App_Start\*" target="content\App_Start" />
     <file src="content\Views\*" target="content\Views" />
     <file src="content\web.config.transform" target="content" />
     <file src="readme.txt" target="" />
   </files>

这曾经是:

   <files>
     <file src="content\*" target="content" />
     <file src="readme.txt" target="" />
   </files>

但这也有奇怪的行为(特别是App_Start没有被包括在内,尽管额外的内容文件夹仍在为视图添加中…请参见下面的描述)

项目本身是按以下格式安排的:

 \<root>
 |_ readme.txt
 |_ content
      |_ Views
      |    |_ Home
      |         |_ <viewname>.cshtml
      |         |_ <viewname2>.cshtml
      |_ App_Start
           |_ <PreprocessFilename>.cs.pp
\
|_自述文件
|_内容
|_观点
|||家
|.cshtml
|.cshtml
|_应用程序启动
|_.cs.pp
然而,我觉得奇怪的是,NuGet pack正在生成一个zip文件,其结构如下:

 \<root>
 |_ readme.txt
 |_ content
      |_ content
      |    |_ Views
      |         |_ Home
      |              |_ <viewname>.cshtml
      |              |_ <viewname2>.cshtml
      |_ App_Start
      |    |_ <PreprocessFilename>.cs.pp
      |_ readme.txt
\
|_自述文件
|_内容
|_内容
|| uu视图
|||家
|.cshtml
|.cshtml
|_应用程序启动
|||.cs.pp
|_自述文件
因此,对于nuget打包文件路径:

  • 为什么readme.txt在两个地方重复
  • 为什么视图被赋予第二个“内容”子文件夹?(应用程序启动时未启动)
  • 如何使内容文件夹的副本准确反映实际结构
  • 如何返回到
    指令以使nuspec文件更“可维护”

如果相关的话,我正在使用
.csproj
文件来创建包。

我也有同样的问题,我能够解决它,但在我看来有点像黑客。我希望看到更好的解决方案,这样我的项目可以在最终包中包含我想要的目录树,但我今天需要它来工作,所以

我要做的就是把content dir中的所有sub dir都拉出来,放在根目录下,然后把目标放在我想要的sub dir中

<file src="Scripts\" target="content\Scripts" />

行为似乎是当你打包一个.csproject
nuget pack MyProject.csproj
时,它会首先根据你的项目结构来安排包,然后查看nuspec以获取更多说明。但是,当您打包项目时,似乎没有任何方法可以让您的nuspec删除上一步添加的内容

因此,如果默认项目结构导致包中出现不需要的内容,那么您应该直接使用.nuspec进行打包
nuget pack MyProject.nuspec
则它将只获取在您的nuspec中指定的内容,您可以在其中准确地定义您想要的内容

如果您有一个几乎具有所需结构的大型项目,那么可以方便地首先从该项目中构建包,使用从该包中提取nuspec,然后根据您的需要进行调整,并最终打包。这样你就不必从头开始构建它

编辑

或者。。。您可以在.csproj上使用执行打包,告诉它忽略某些特定文件,并在.nuspec中为这些文件编写自定义规范,该规范将自动读取以获取其他数据


不过,我个人觉得将.nuspec作为包的唯一定义更为简洁。

Alex-你有没有发现readme.txt文件被复制的问题?