我正在尝试创建一个将某些文件复制到应用程序的wwwroot文件夹中的Nuget包,但我似乎无法阅读文档并在线查看其他问题。 。这是我到目前为止所拥有的。
<?xml version="1.0"?>
<package >
<metadata>
<id>...</id>
<version>...</version>
<title>...</title>
<authors>...</authors>
<requireLicenseAcceptance>...</requireLicenseAcceptance>
<description>...</description>
<contentFiles>
<files include="**/*.*" copyToOutput="true" buildAction="EmbeddedResource" />
</contentFiles>
</metadata>
<files>
<file src="ProjectName\bin\Release\**.dll" target="lib" />
<file src="ProjectName\wwwroot\**.*" target="content\wwwroot" />
<file src="ProjectName\wwwroot\**.*" target="contentFile\any\any\wwwroot" />
</files>
</package>
它将文件按预期放入Nuget包的content和contentFile文件夹中,但在引用时如果不将文件复制到项目中。
答案 0 :(得分:0)
不支持将文件复制到项目的源目录中,对于经典项目而言,这是一种沮丧的做法。
但是,contentFiles
部分旨在将文件逻辑地包含到项目中,以便它们可以影响构建的输出。 buildAction="Content"
会将文件添加到构建和发布输出中。这允许在不修改源的情况下向项目添加内容。
答案 1 :(得分:0)
因此,在检查建议的链接和互联网的其余部分之后,这是我提出的解决方案。
public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseMyApp(this IApplicationBuilder app) => UseMyApp(app, null);
public static IApplicationBuilder UseMyApp(this IApplicationBuilder app, Action<Options> setupOptions)
{
var options = new Options();
setupOptions?.Invoke(options);
app.UseStaticFiles(new StaticFileOptions
{
RequestPath = $"/{options.RoutePrefix}",
FileProvider = new EmbeddedFileProvider(Assembly.Load(new AssemblyName("MyAssembly")), "MyAssembly.EmbeddedResourcesFolder")
});
return app;
}
public class Options
{
internal Options() { }
public string RoutePrefix { get; set; } = "defaultRoutePrefix";
}
}
然后,在您的html中,您可以通过执行类似的操作来引用静态文件。
<link rel="stylesheet" href="~/routePrefix/fileName.extension" />
从技术上讲,这不是我所提出的问题的答案,但现在我很清楚,我要求做的不是最佳做法 - 这是一个更好的方法。