升级到VS2017后找不到适合文化或中性文化错误的资源

时间:2018-02-15 07:18:52

标签: c# winforms visual-studio-2017

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

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

然后我再次打开项目并添加了缺少的任何引用(System.Design和System.Windows.Forms)。我还删除了AssemblyInfo.cs

然后我在Properties选项卡中设置Package信息,并构建了一个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 个答案:

答案 0 :(得分: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>。更多here