Tag: assembly loading

Activator.CreateInstance:无法从程序集加载类型

我正在尝试在我的项目中创建一个在插件.dll中实现的类的实例来进行类型发现。 我收到了这个例外: 无法从程序集’SquidReports.DataCollector.Plugin.BES,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’加载类型’Action’。 这是我正在使用的确切方法签名: https : //msdn.microsoft.com/en-us/library/d133hta4(v = vs.110).aspx 换句话说,我试图根据程序集名称和类名生成对象,如下所示: object modelObject = Activator.CreateInstance((string)modelInfo.AssemblyName, (string)modelInfo.ModelName); 这里要注意的一个重要部分是我使用程序集的“短”名称而不是“完整”名称(包括Version,Culture和PublicToken)。 但是,MSDN明确指出: ‘assemblyName’可以是以下任一种:程序集的简单名称,没有其路径或文件扩展名。 例如,您可以为路径和名称为。\ bin \ TypeExtensions.dll的程序集指定TypeExtensions。 已签名程序集的全名,包括其简单名称,版本,区域性和公钥标记; 例如,“TypeExtensions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 181869f2f7435b51”。 具体来说,我正在尝试创建一个在程序集’SquidReports.DataCollector.Plugin.BES’中定义的类’Action’的实例。 我明确地将此程序集引用为完全相同* .cs文件顶部的using指令,我正在尝试创建该实例。 我从之前的问题/答案中尝试了以下建议: 清理你的解决方案,重建并再试一次这似乎适用于一些ASP.NET项目,但这是一个简单的旧控制台应用程序。 检查配置文件中引用的程序集再次,这是一个简单的控制台应用程序,只在同一解决方案的不同项目中使用GAC和库 1.确保程序集位于正确的工作目录中: 我们到了… 2.确保程序集是磁盘上的相同版本 对… 3.最终的建议是使用fuslogvw.exe。 我没有使用该工具的经验,但有一件事我觉得很奇怪。 在运行调试会话时,我的程序集的长命名和短命名版本都出现了: 我看了看两个日志。 这个命名短的版本确实会产生一些警告: ===预绑定状态信息=== LOG:DisplayName = SquidReports.DataCollector.Plugin.BES […]

无法加载文件或程序集“Microsoft.Practices.Unity”

我正在尝试将Unity升级到版本(2.1.505.2),但是当我运行应用程序时,我得到以下FileLoadException 无法加载文件或程序集“Microsoft.Practices.Unity,Version = 2.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。 我们正在从Unity 2.0.414.0升级到2.1.505.2。 引用Unity的解决方案中的所有项目引用都指向dll的正确版本 Gac中没有引用Unity dll。 (通过检查gacutil -l双重检查) 我从存档中删除了所有Unity dll。 用powershell双重检查 PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { “{0}`t{1}” -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion } 如何找出仍然引用Unity 2.0.414.0的内容? FusionLogVw没有告诉我哪个DLL导致了这个问题。 任何帮助深表感谢!