NuGet 3.3+:contentFiles未添加到项目中

时间:2016-03-14 10:37:07

标签: nuget

在阅读了我可以找到的关于NuGet 3.3+的新contentFiles元素的所有内容之后,我仍然无法让它在我的包中运行。我有一个针对net46uap10.0的包,并且项目类型和平台的正确DLL的选择按预期工作。但我还想在程序包安装时向项目添加两个文件,一个用于所有项目和平台的CSV文件,以及一个用于C#或VB.Net(带buildAction="Compile")的代码文件。这是我最新的.nuspec文件的删节版本:

<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata minClientVersion="3.3.0">
    ...
    <contentFiles>
      <files include="any\any\ErrorCodes.csv" buildAction="None" copyToOutput="false" />
      <files include="cs\any\Errors.cs.pp" buildAction="Compile" />
      <files include="vb\any\Errors.vb" buildAction="Compile" />
    </contentFiles>
  </metadata>
  <files>
    <file src="contentFiles\any\any\ErrorCodes.csv" target="contentFiles\any\any\" />
    <file src="contentFiles\cs\any\Errors.cs.pp" target="contentFiles\cs\any\" />
    <file src="contentFiles\vb\any\Errors.vb" target="contentFiles\vb\any\" />
    ...
  </files>
</package>

创建包时没有错误,它包含contentFiles文件夹中具有指定目录结构的三个文件。

但是当我安装软件包时 - 我尝试使用通用应用程序(C#和VB)和我修改为使用project.json文件的.NET 4.6控制台应用程序 - 添加了对DLL的引用,但内容文件既未添加到项目结构中,也未复制到项目目录中。

我感谢任何意见!

1 个答案:

答案 0 :(得分:6)

好的,我发现contentFiles实际上正在工作,但不是我预期的方式。对于无法找到他/她的contentFiles的每个人的简短描述:

  • NuGet 3.3+ contentFiles not 已添加到项目结构中。您将无法在Visual Studio中看到它们。
  • 而是将文件提取到项目的 obj 文件夹中的文件夹中,并引用(如果文件是代码)。您甚至可以在IntelliSense中查看contentFiles代码文件中的类或方法。就我而言,Errors课程是可以访问的,虽然它在项目的任何地方都不可见。
  • 解压缩文件的路径具有以下架构:\ obj \&lt; Debug或Release&gt; \ NuGet \&lt;某些GUID&gt; \&lt; NuGet包名称&gt; \&lt;版本&gt; \

我不确定我是否喜欢这种新机制。来自Visual Studio中看不到的一些隐形源的代码(通过NuGet发布的库在References中可见,它通过contentFiles带来的任何代码都没有)可能会造成问题。我实际上发现当我在Visual Studio中出现歧义错误时,contentFiles机制正在工作,因为&#34;隐形&#34;来自NuGet包的Errors.cs与&#34; visible&#34; Errors.cs我手动添加到项目中。