Asp.net-Core
通過 Nuget 安裝時,.Net 核心解決方案中的 Nuget 內容文件不會被複製
我無法複製我在使用 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 靜態內容:
- 創建你的 XY.nuspec 文件(像往常一樣)
- 將 config.xml 包含到 Nuget 中:
<file src="config.xml" target="contentFiles\any\any\config.xml" />- 添加一個新的 .targets 文件XY.targets
- 將新的 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="") 文件被複製。直到這個文件仍然只是連結!!!
- 如果您將內容文件設置為具有建構操作並複製到項目的輸出目錄,這些設置將失去!
不幸的是,這是目前最好的解決方案。
