升级到VS2017后出现“找不到适用于文化或中性文化的任何资源”错误

3

我有一个仅包含自定义控件的程序集。我通过将旧的.csproj文件替换为以下文件来将该项目从VS2015升级到VS2017:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>
</Project>

我接着打开了项目,并添加了缺失的引用(System.Design 和 System.Windows.Forms)。我还删除了 AssemblyInfo.cs 文件。
然后我在“属性”标签中设置了包信息并构建了一个 NuGet 包,在我的 WinForms 应用程序中发布和使用。请注意,在“包信息”标签中,我将 "Assembly neutral language" 设置为 "invariant",但在关闭和重新打开属性标签后,它会恢复为 "none"。 我还将其设置为特定语言。
该程序集有自己的 resources.resx 文件,并设置为 Embedded resource。一些用户控件也有单独的 resx 文件,它们也被设置为 Embedded resource。
但是,当打开一个使用一个或多个自定义控件的窗体时,我收到以下错误消息:
“找不到适用于特定区域性或中性区域性的任何资源。请确保 'ControlsAssembly.MyControl.resources' 版本已正确地嵌入或链接到 'ControlsAssembly' 程序集中进行编译,或者所需的所有卫星程序集都可加载并完全签名。”
请注意,在项目仍处于 VS2015 时,发布包一切正常。问题是在将项目升级到 VS2017 后立即出现的。
另外,请注意,在 VS2017 中,“MyControl.designer.cs”和“MyControl.resx”文件与“MyControl.cs”处于同一级别,而不是在其下方。
项目有什么问题?我漏掉了什么吗?
1个回答

1

当我们将一个旧的.net项目转换为sdk项目风格时,我们遇到了同样的问题。 源和解释: https://github.com/microsoft/msbuild/issues/4488。 恐怕在VS 2017中,唯一的解决方案就是添加:

<ItemGroup>
  <EmbeddedResource Update="Form1.resx">
    <DependentUpon>Form1.cs</DependentUpon>
  </EmbeddedResource>
</ItemGroup>

为了每个有问题的表单,将其添加到你的csproj中。记得使用相对路径,如果表单在子文件夹中... 至于vs2019,你可以尝试:更改为<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">并使用<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>。更多信息

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接