Asp.net-Core

通過 Nuget 安裝時,.Net 核心解決方案中的 Nuget 內容文件不會被複製

  • January 27, 2021

我無法複製我在使用 nuget 包資源管理器創建 nuget 包時添加的 .Net 核心 Web 應用程序項目中的內容靜態文件。在 .Net 框架項目模板中正確複製了相同的內容,但在 .net 核心模板中卻沒有。我正在使用 VS 2015 更新 3。我在這裡缺少什麼嗎?任何幫助將不勝感激。

下面是我對內容文件結構的快照。

在此處輸入圖像描述

有一篇關於此的nuget 部落格文章,目前尚不支持。

支持的項目類型

此功能僅適用於將安裝到使用 project.json 文件管理的項目的包。目前只有兩種項目類型由 project.json 管理。

  • UWP 應用
  • 可移植類庫

contentFiles 選項不適用於其他項目類型

很遺憾,這個基本功能已被排除在 .net Core 項目之外。特別是因為支持 PCL,它是 .net Core 項目的一個子集。

GitHub 上有很多關於此的問題,目前尚不清楚此功能是否會很快恢復。

似乎仍然不支持。“破解”它的唯一方法是使用 MSBuild 目標和建構事件。

根據文件:

建構

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. 添加一個新的 .targets 文件XY.targets
  4. 將新的 XY.targets 文件包含到您的包中的“build”文件夾中。<file src="XY.targets" target="build"/>

XY.targets 文件的內容

<?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 目標將成為記憶體包的一部分,並將在每個建構上執行(目前在建構之前)。

此解決方案的問題:

  • 在您建構解決方案之前,添加的文件仍然連結。在建構階段 (BeforeTargets="") 文件被複製。直到這個文件仍然只是連結!!!
  • 如果您將內容文件設置為具有建構操作並複製到項目的輸出目錄,這些設置將失去!

不幸的是,這是目前最好的解決方案。

引用自:https://stackoverflow.com/questions/40469058