访问资源时WinForm崩溃

时间:2014-02-22 09:57:59

标签: c# .net winforms

我正在开发一个WinForm应用程序,我有一些嵌入式资源(表单的图形布局)。问题是,当我在我的机器上启动应用程序时它运行得很好,但是如果我将它传递到另一台PC上它可能会也可能不会工作。在我试过的最后一台计算机上(Windows 7 64位,安装了.NET 4.0),当我尝试访问资源时它被阻止了。这是阻止应用程序的代码,下面会抛出完整的异常。

//Note: notifierName is a string passed as an argument
_icon = new NotifyIcon
{
    Text = notifierName,
    Icon = SystemIcons.Application,//Properties.Resources.Tray,
    Visible = true
};
try
{
    _icon.Icon = Properties.Resources.Tray;
}
catch (Exception e)
{
    Logger.WriteLog(e.ToString());
}

在追踪导致异常的原因之后,我尝试将所有资源设置为“嵌入资源”,.exe的大小加倍(因此图像实际上保存在那里)但发生了同样的错误。我想我缺少一些关于资源如何工作的东西,因为在另一台机器上传递相同的exe并没有造成所有这些麻烦。谢谢你的帮助。

  

System.TypeLoadException:无法加载类型'System.Runtime.CompilerServices.ExtensionAttribute'domall'assembly'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'。      在System.ModuleHandle.ResolveMethod中(RuntimeModule模块,Int32 methodToken,IntPtr * typeInstArgs,Int32 typeInstCount,IntPtr * methodInstArgs,Int32 methodInstCount)      在System.ModuleHandle.ResolveMethodHandleInternalCore中(RuntimeModule模块,Int32 methodToken,IntPtr [] typeInstantiationContext,Int32 typeInstCount,IntPtr [] methodInstantiationContext,Int32 methodInstCount)      在System.ModuleHandle.ResolveMethodHandleInternal中(RuntimeModule模块,Int32 methodToken,RuntimeTypeHandle [] typeInstantiationContext,RuntimeTypeHandle [] methodInstantiationContext)      在System.Reflection.CustomAttributeData..ctor中(RuntimeModule范围,CustomAttributeRecord caRecord)      在System.Reflection.CustomAttributeData.GetCustomAttributes中(RuntimeModule模块,Int32 tkTarget)      在System.Reflection.CustomAttributeData.GetCustomAttributesInternal(RuntimeAssembly target)中      在System.Resources.ManifestBasedResourceGroveler.GetNeutralResourcesLanguage(Assembly a,UltimateResourceFallbackLocation& fallbackLocation)中      在System.Resources.ResourceManager.CommonSatelliteAssemblyInit()中      在System.Resources.ResourceManager..ctor(String baseName,Assembly assembly)中      在PatcherNET4.Properties.Resources.get_ResourceManager()中      在PatcherNET4.CustomControls.Notifier.Create(String notifierName)

1 个答案:

答案 0 :(得分:2)

当您使用.Net 4.5编译应用程序但在4.0. In .Net 4.5 ExtensionAttribute中移除System.Core并添加mscorlib时,会发生此错误。

Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib

Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0 Error