dotnet build不包括文本文件资源内容

时间:2018-01-18 16:26:35

标签: asp.net asp.net-core msbuild

我正在处理的解决方案包括一个net452项目,它有两个文本文件,设置为:

Build Action: Content
Copy to Output Directory: Do not copy

可以在代码中访问这些文件,如下所示:

_listItems = Properties.Resources.ListItems.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

在Visual Studio 2017中构建解决方案时,资源按预期加载。

使用msbuild(Build Engine版本15.3.409.57025)从命令行构建解决方案时,将按预期加载资源。

但是,当使用dotnet builddotnet msbuild从命令行构建解决方案时,资源未正确加载,而是字符串类型替换文件内容:

System.String, mscorlib, Version=4.0.0.0, Culture=neutral..

查看输出msbuild的目标是.NET框架:

Microsoft (R) Build Engine version 15.3.409.57025 for .NET Framework

其中dotnet msbuild的目标是.Net Core

Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core

这种不同行为的原因是什么,是否可以使用dotnet构建正确包含资源?

2 个答案:

答案 0 :(得分:2)

与基于dotnet的工具(“.NET Core SDK”或“.NET CLI”)一起分发的.NETBuilder版本的MSBuild不支持强类型资源或文件引用。仅支持键值字符串对。无论什么框架是针对性的,但使用哪种工具来构建。

这是因为使用文件引用或强类型资源的资源序列化使用System.Windows.Forms中的类型,这些类型在.NET Core上不可用。

请参阅this GitHub issue以供参考。

如果您需要嵌入式文件或强类型资源,则必须使用随Visual Studio或Mono一起发布的完整框架MSBuild。

答案 1 :(得分:0)

嗯,dotnet build是.Net Core命令行构建工具,msbuild在标准.Net Framework上运行。更详细的比较http://www.natemcmaster.com/blog/2017/07/05/msbuild-task-in-nuget/

您的目标是.Net还是.Net Core Framework?

相关问题