我有一个仅包含自定义控件的程序集。我已将项目从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
位于同一级别,而不是位于其下方。
该项目有什么问题?我错过了什么吗?
答案 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。