我正在处理的解决方案包括一个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 build
或dotnet 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构建正确包含资源?
答案 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?