[英]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.