0

我从 MS Visual Studio 2010 运行应用程序时遇到问题。实际上这是一个很长的故事,我之前遇到过不同的相关问题。但该项目至少运行了半年,没有任何变化。现在我试图再次运行它,但没有效果。首先这里有一些关于相关问题的链接的链接,这些问题可能看起来是相同的(但看起来不一样 - 只是相关的):

将项目的 .NET 目标框架从 4.0 更改为 3.5 后找不到文件(或程序集)

将应用程序从 .net 4.0 降级到 3.5

针对 3.5 框架的 VS2010 上的 RESX 文件问题

我的项目有 TargetFramework=2.0,它包含一些带有应用程序图像和图标的 resx 资源文件。我以前在资源文件编译方面遇到过问题,但修复了它们,就像上面链接中的帖子一样。直到昨天一切正常(我很久没有打开那个项目,所以不能说环境到底发生了什么变化)。

现在问题本身:项目构建成功,但是当应用程序运行时,我在表单设计器代码'resources. GetObject ("myImageName")':

Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError)
at System.Resources.ResourceReader.FindType(Int32 typeIndex)
at System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex)
at System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
at System.Resources.ResourceReader.LoadObject(Int32 pos, ResourceTypeCode& typeCode)
at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase, Boolean isString)
at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase)
at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
at System.Resources.ResourceManager.GetObject(String name)
[MYAPP stack trace part. Hope you don't need it]
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

我在 Microsoft 网站上询问了有关此问题的问题,发现另外一个人也遇到了完全相同的问题。但是他的问题被忽略了,我也没有回答。

环境: Windows 7 x64、.NET 4.0 SP1、VS 2010 Ultimate SP1。项目构建配置:Debug/AnyCPU(我尝试了 AnyCPU/x86 的 Debug/Release - 都一样。x64 和 IA64 - 对于这个项目来说是不可能的)

调查详情:

  • resx 文件不包含对 4.0 程序集的引用。特别是它引用 System.Windows.Forms 2.0 和 System.Drawing 2.0
  • 项目没有(并且不能包含对任何 4.0 程序集的引用,因为它具有 TargetFramwork 2.0)
  • 在整个项目文件夹中搜索“4.0”条目发现了奇怪的事实:我的 exe 文件引用了 mscorlib 4.0。实际上我无法弄清楚它是如何发生的以及如何解决它。虽然 AppDomain.CurrentDomain.GetAssemblies() 返回 mscorlib 2.0,而不是 4.0(以及 2.0 版的所有其他 .NET 程序集)。
  • 将 resgen 切换到 32 位模式无济于事。还原它也没有用。
  • 使用记事本更改 proj 文件以使用“正确”版本的 resgen 也无济于事
  • 一整天的调查和许多其他尝试都没有成功。我什至没有发现很多人有同样的问题。
  • TargetFramework=3.5 也是如此,但是当设置 TargetFramework=4.0 时,一切都开始正常工作。不幸的是,目前无法迁移到 .NET 4.0
4

0 回答 0