5

我有一个带有文件规范的 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

然而,对我来说似乎很奇怪的行为是 NuGet 包正在生成一个具有以下结构的 zip 文件:

 \<root>
 |_ readme.txt
 |_ content
      |_ content
      |    |_ Views
      |         |_ Home
      |              |_ <viewname>.cshtml
      |              |_ <viewname2>.cshtml
      |_ App_Start
      |    |_ <PreprocessFilename>.cs.pp
      |_ readme.txt

所以关于nuget打包文件路径:

  • 为什么 readme.txt 在两个地方重复?
  • 为什么视图被赋予第二个“内容”子文件夹?(而 App_Start 不是)
  • 如何使内容文件夹的副本准确反映实际结构?
  • 如何返回<file src="content\*" target="content" />指令以使 nuspec 文件更“可维护”

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

4

2 回答 2

0

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

因此,如果默认项目结构导致您的包中包含不需要的内容,您应该依赖直接由 .nuspec 打包。nuget pack MyProject.nuspec然后它只会获取在您的 nuspec 中指定的内容,您可以在其中准确地定义您想要的内容。

如果您有一个几乎具有您想要的结构的大项目,那么首先从项目构建包可能会很方便,使用Nuget 包资源管理器从该包中提取一个 nuspec,稍后您可以调整它以满足您的需要,最后您打包反对。这样您就不必从头开始构建它。

编辑

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

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

于 2015-03-22T17:22:51.057 回答
0

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

为了解决这个问题,我必须做的是将内容目录中的所有子目录拉出并放置在根级别,然后将目标设置为我希望它最终进入的子目录。

<file src="Scripts\" target="content\Scripts" />
于 2014-08-20T17:56:47.583 回答