[英]How to setup a NuGet package to copy content files to output build directory?
注意:由於該問題的范圍太廣, 因此對該問題 (現已結束)進行了跟進,並且該問題的第一部分有關.dll的問題已解決,這是一個單獨的問題。
我正在開發一個名為ComputeSharp的.NET Standard 2.0項目 ,我想將其發布為NuGet程序包,但我不知道如何讓程序包使用以下命令將內容文件復制到項目的輸出生成目錄中:它。 一些信息:
.nuspec
位於主項目ComputeSharp
的文件夾中,並具有以下結構: <?xml version="1.0"?>
<package >
<metadata>
<id>ComputeSharp</id>
...
<dependencies>
<dependency id="SharpDX.Direct3D12" version="4.2.1-beta0-gab36f12303" />
...
</dependencies>
<contentFiles>
<files include="..\ComputeSharp.Shaders\Renderer\Templates\*.mustache" buildAction="Content" copyToOutput="true" />
</contentFiles>
</metadata>
</package>
ComputeSharp
,然后在該項目的文件夾中打開一個cmd,然后運行: nuget pack ComputeSharp.csproj -Prop Configuration=Release -IncludeReferencedProjects
.mustache
文件): ComputeSharp.x.x.x.nupkg
├───rels
│ └───...
├───content
│ └───Renderer
│ └───Templates
│ └───ShaderTemplate.mustache
├───lib
│ └───netstandard2.0
│ ├───ComputeSharp.dll
│ ├───ComputeSharp.Graphics.dll
│ └───ComputeSharp.Shaders.dll
├───package
│ └───...
├───[Content_Types].xml
└───ComputeSharp.nuspec
問題 :一旦我創建了一個測試項目並安裝了NuGet軟件包,就可以很好地構建它,但是整個
Renderer\\Templates\\ShaderTemplate.mustache
樹都沒有復制到構建目錄中,因此我的lib無法加載該文件(因為它是相對於lib程序集的路徑加載的)。
我已經閱讀了無數SO問題以及文檔,並在這里嘗試了很多組合(例如,設置ContentType="None"
而不是"Content"
,但結果始終相同: .mustache
文件存在於程序包,但不會使用該程序包復制到項目的構建目錄中。構建項目時,我還需要做一些其他事情來使NuGet程序包在輸出目錄中重新創建該樹+文件嗎?
謝謝您的幫助!
我建議通過生成操作“嵌入的資源”將所需的文件嵌入到程序集中。 這樣,您不必依靠Nuget來安裝它們。 相反,在首次使用時,您可以從程序集中讀取它們並將它們復制到文件系統中或直接使用它們。 這是從程序集中讀取嵌入式文件並將其復制到文件系統中的方法:
private void CopyEmbeddedResourceToFile(Assembly assembly, string resourceName, string filePath)
{
var key = GetResourceKey(assembly, resourceName);
using (Stream stream = assembly.GetManifestResourceStream(key))
using (var file = new FileStream(filePath, FileMode.Create))
{
if (stream == null)
throw new ArgumentException($"Resource name '{resourceName}' not found!");
stream.CopyTo(file);
}
}
您要使用contentFiles
文件夾而不是content
。 請參閱此博客NuGet ContentFiles Demystified 。
您還可以閱讀使用PackageReference啟用對“內容”文件夾的支持,以解釋為何content
文件夾不能與PackageReference
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.