当项目包含外语资源时,dotnet构建失败

时间:2018-03-22 13:41:13

标签: c# .net build resources target-sdk

[Visual Studio 15.6.3,dotnet SDK 2.1.102]

最近,(可能在更新之后)我追踪了一个dotnet构建错误,该错误正在显示包含外语资源的项目。错误消息如下:

  

C:\ Program Files \ dotnet \ sdk \ _ 2.1.102 \ Microsoft.Common.CurrentVersion.targets(3570,5):错误MSB4062:无法从“Microsoft.Build.Tasks.AL”任务加载程序集Microsoft.Build.Tasks.Core,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a。确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类。

我可以提供重现此错误的步骤:

  1. 在Visual Studio中创建一个C#控制台应用程序,将其命名为“DotNetBugTest”
  2. 在构建下编辑项目属性,取消选中“首选32位”(控制台应用程序工件
  3. 在项目的根级别添加资源,将其命名为“Messages.resx”
  4. 添加字符串资源,将其命名为“A”,并将其命名为“English”
  5. 在项目的根级别添加另一个资源,将其命名为“Messages.fr-CA.resx”
  6. 添加相同的字符串资源,将其命名为“A”,并将其命名为“French”
  7. 现在在“程序类”中添加以下内容:
  8. class Program
    {
        static void Main(string[] args)
        {
            var rm = new ResourceManager("DotNetBugTest.Messages", typeof(Program).Assembly);
    
            var en = CultureInfo.CreateSpecificCulture("en-US"); 
            var fr = CultureInfo.CreateSpecificCulture("fr-CA"); 
    
            Console.WriteLine($@"en={rm.GetString("A", en)}");
            Console.WriteLine($@"fr={rm.GetString("A", fr)}");
    
            Console.ReadKey();
        }
    }
    

    这在Visual Studio中运行良好。输出:

    en=English
    fr=French
    

    但是如果你尝试从命令行编译它:

    dotnet build --configuration Debug
    

    你得到错误。

    有人知道如何解决这个问题吗?甚至建议在哪里看?

    提前致谢...

1 个答案:

答案 0 :(得分:0)