【发布时间】:2015-12-06 16:04:31
【问题描述】:
下面的程序应该从卫星资源文件中获取资源字符串。使用 VS2015 使用 target framework='NET Framework 4.5.2' 编译时,它工作正常。但是,设置 target framework='NET Framework 3.5' 会导致无法找到卫星资源文件并回退到默认资源。
我查看了 .exe 和附属 .dll 文件,发现它们被编译为不同的 .net 版本(尽管生成它们的编译是相同的):
Main exe got: .Net Framework v3.5
Satellite resource dll got: .Net Framework v4.0
看起来好像卫星 dll 获取了错误的 .Net 版本。有没有人经历过这种情况并且有解决方案吗? (除了将项目升级到最新的.Net版本)
class Program
{
static void Main(string[] args)
{
CultureInfo newCultureInfo = new System.Globalization.CultureInfo("da-DK");
Thread.CurrentThread.CurrentUICulture = newCultureInfo;
Console.WriteLine("Resource test");
ResourceManager rm = new ResourceManager("ResourceTest.Resources.MyResources", Assembly.GetExecutingAssembly());
Console.WriteLine(rm.GetString("hello"));
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
编辑:接缝好像我的开发环境更新不好。重新安装整台计算机有帮助,但简单地重新安装 .Net 和 Visual Studio 并没有! (我想知道注册表数据库中是否有一些东西不会通过简单的重新安装来重置)
【问题讨论】:
-
不是一个常见的抱怨,唯一明显的原因是卫星 dll 没有重建。更常见的问题是 .resx 文件仍然包含 4.0 类型引用。它们只有在您对它们进行更改时才会被重写,并且在您更改框架目标后很容易被忽略。使用文本编辑器查看文件。
-
不,事实并非如此。我也想到了它,所以为了确保不是这种情况,我删除了整个 bin 目录,然后重新编译。问题依然存在。
-
我也有这个问题
-
对我来说恰恰相反,它一直有效,直到我完成了 Windows 的全新安装,然后它开始为 .net 3.5 程序生成 .net 4.0 资源。因此,可悲的是,全新安装不是解决方案/解决方法。
-
试试this solution,虽然它说的是VS2017,但修复应该适用于类似情况。
标签: c# .net resources satellite-assembly