通过Nuget安装时,不会复制.Net核心解决方案中的Nuget内容文件

时间:2016-11-07 15:42:14

标签: asp.net-core nuget nuget-package

我无法复制我在使用nuget package explorer创建nuget包时添加的.Net核心Web应用程序项目中的内容静态文件。同样的事情在.Net框架项目模板中正确复制,但在.net核心模板中没有。我正在使用VS 2015更新3.Am我在这里缺少什么?任何帮助将不胜感激。

以下是我对内容文件结构的快照。

enter image description here

4 个答案:

答案 0 :(得分:8)

此问题有nuget blog post,目前尚不支持。

  

支持的项目类型

     

此功能仅适用于将安装到使用project.json文件管理的项目的软件包。目前只有两个项目类型由project.json管理。

     
      
  • UWP apps
  •   
  • 便携式类库
  •   
     

contentFiles选项不适用于其他项目类型

很遗憾,这个基本功能已被排除在.net核心项目之外。特别是因为支持PCL,它是.net Core项目的一个子集。

GitHub上存在很多关于此问题的问题,并且很难不清楚这个功能是否会很快回归。

答案 1 :(得分:1)

似乎仍然不受支持。唯一的“破解”方法是使用MSBuild Targets和Build事件。

根据this文档:

  

构建
  MSBuild .targets .props 文件自动插入   项目文件或project.lock.json(NuGet 3.x +)。

因此,使其可以与任何文件一起使用,例如:“ config.xml”作为Nuget静态内容:

  1. 按照常规方式创建XY.nuspec文件
  2. 将config.xml包含在Nuget中:<file src="config.xml" target="contentFiles\any\any\config.xml" />
  3. 添加新的.target文件 XY.target
  4. 将新的XY.target文件包括在包中的“ build”文件夹中。 <file src="XY.targets" target="build"/>

XY.target的内容

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ContentFilesPath>$(MSBuildThisFileDirectory)..\contentFiles\any\any\</ContentFilesPath>
  </PropertyGroup>
  <Target Name="CopyConfigs" BeforeTargets="**PreBuildEvent**">
    <Copy SourceFiles="$(ContentFilesPath)\config.xml" DestinationFiles="$(ProjectDir)config.xml" **SkipUnchangedFiles="true" Condition="!Exists('$(ProjectDir)config.xml')"**></Copy>
  </Target>
</Project>

在打包和安装Nuget之后,此MSBuild目标将成为Cached软件包的一部分,并将在每个版本上运行(当前在生成之前)。

存在此解决方案:

  • 添加的文件仍保持链接,直到您构建解决方案为止。在构建过程中,复制了Pahes(BeforeTargets =“”)文件。直到该文件仍被链接!!!
  • 如果您将内容文件设置为具有Build操作并复制到项目的Output目录,则这些设置将丢失!

不幸的是,这是目前最好的解决方案。

答案 2 :(得分:0)

某些公共nuget程序包(例如https://www.nuget.org/packages/NUnit3TestAdapter/3.10.0https://www.nuget.org/packages/Selenium.WebDriver.ChromeDriver/)可以复制文件。我已尝试对其进行调查(https://github.com/nunit/nunit3-vs-adapterhttps://github.com/jsakamoto/nupkg-selenium-webdriver-chromedriver)。但是看来,他们已经实施了非常棘手的解决方法

答案 3 :(得分:-1)

阅读这篇文章后,我想出了一个解决方法。我创建了一个.Net程序集项目,并将其从所有内容中完全清空。然后我将项目移动到与.Net Core Web应用程序的项目相同的目录中。我没有从Web应用程序添加NuGet包引用,而是从.Net程序集项目中添加它。所有文件都正确地复制到目录中,并自动添加到Web项目中,因为它们共享同一目录。这个解决方案感觉非常脏,但它允许我使用NuGet包管理.Net Core Web项目的静态文件。