nuspec contentFiles未添加到项目中

时间:2017-08-28 14:36:21

标签: visual-studio nuget nuget-package project.json nuspec

我有一个内部有 project.json 的网络项目(mvc5)。

另外,我有一个nuget包。在这个包里面(除了dll引用)我有一些内容文件(cshtml文件,css,javascript等)。

要实现两个目标:

  • 将软件包安装到项目后,我希望将内容文件包含在项目中。
  • 构建项目后,我希望nuget恢复内容文件

nuspec文件:

<?xml version="1.0"?>
    <package>
      <metadata>
        /.../

        <dependencies>
            <group targetFramework="net461">
              /.../

           </group>
        </dependencies>
          <contentFiles>
        <files include="**/*.*" flatten="false" copyToOutput="false" buildAction="Content" /> 
      </contentFiles>
      </metadata>
      <files>
         /.../
    <file src="..\src\Content\**\*.*" target="contentFiles\any\any\Content" /> 
    <file src="..\src\Views\**\*.*" target="contentFiles\any\any\Views" /> 
      </files>
    </package>

嗯,Visual Studio正在添加nuget包而没有任何问题。该参考文献也包括在内。但内容总是缺失。内容文件不会从/ packages /文件夹中复制,也不会包含在项目中。 同样的,当我构建项目时 - 它只是复制dll并且根本不接触包中的内容文件。

只有当我有copyToOutput =&#34; true&#34;时它才有效,但当然所有内容都会转到bin文件夹。

我需要恢复内容文件的原因是来自nuget包的文件被tfs&#39;忽略文件&#39;忽略。 (.tfignore)。我不想让这些内容文件成为TFS中Web项目的一部分。但是,当然,TFS构建服务器无法构建项目,因为缺少某些内容文件(包中的文件)。所以我希望构建服务器上的nuget在构建项目的统计信息之前恢复内容文件。

如果有可能,任何想法如何让这项工作?或者这可能是不可能的,我必须将内容文件包含在项目中?

2 个答案:

答案 0 :(得分:2)

您可以在包中添加msbuild目标。在此目标中,您可以执行nuget restore命令...

示例:

<?xml version="1.0"?>
<package >
    <metadata>
    <!-- ... -->
    </metadata>
    <files>
      <!-- Include your MSBuild target to \build -->
      <file src="build\myNuGetRestoreTarget.targets" target="build" />
    </files>
</package>

请参阅: https://docs.microsoft.com/en-us/nuget/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package

答案 1 :(得分:1)

这是设计的。 NuGet包不再需要修改项目的源代码,而只是添加到其构建的输出或构建过程(除了.NET库之外)。用于向项目添加源的content文件夹仅继续支持基于packages.config的项目,因为它将对现有项目进行重大更改,但使用project.json或{{1 (VS 2017)获得新的行为。