【问题标题】:dotnet build not including text file resource contentdotnet build 不包括文本文件资源内容
【发布时间】:2018-06-27 19:12:48
【问题描述】:

我正在处理的解决方案包括一个 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(构建引擎版本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 build 正确包含资源?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    使用基于 dotnet 的工具(“.NET Core SDK”或“.NET CLI”)分发的 MSBuild 的 .NET Core 版本不支持强类型资源或文件引用。仅支持键值字符串对。目标是什么框架并不重要,重要的是使用哪种工具来构建。

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

    参考this GitHub issue

    如果您需要嵌入文件或强类型资源,则必须使用随 Visual Studio 或 Mono 分发的全框架 MSBuild。

    【讨论】:

    • 谢谢,这正是我正在寻找的答案。
    • 尽管使用了完整的 .Net 版本的 Msbuild,但在使用 dotnet publish 执行 Web 应用程序发布后,我们在 CI 服务器上看到了同样的问题。这是意料之中的吗?
    • 是的,您需要更改为msbuild /t:Publish /p:Configuration=Release
    猜你喜欢
    • 2023-04-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多