【问题标题】:Nuget files being packed into the wrong placesNuget 文件被打包到错误的位置
【发布时间】:2013-02-08 18:33:57
【问题描述】:

我有一个带有文件规范的 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 不是)
  • 如何使内容文件夹的副本准确反映实际结构?
  • 如何返回 &lt;file src="content\*" target="content" /&gt; 指令以使 nuspec 文件更“可维护”

如果相关,我将使用.csproj 文件来创建包。

【问题讨论】:

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

标签: nuget nuget-package nuspec


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    如果你有一个几乎有你想要的结构的大项目,首先从项目构建包可能很方便,使用Nuget Package Explorer从这个包中提取你想要的nuspec稍后进行调整以适应您的需要,并最终满足您的需求。这样您就不必从头开始构建它。

    编辑

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多