【发布时间】:2013-12-03 16:31:39
【问题描述】:
我在我的项目中使用Magick.NET,它会渲染游戏地图。当我为 x86 处理器构建工具和为 64 位处理器构建 Magick.NET 的 X64 版本时,是否可以加载 X86 版本?我想主要的问题是,不同版本的dll有不同的身份。
我已经编写了一个预构建事件,该事件在构建时处理正确的 dll,具体取决于所选的构建配置。我还使用Assembly.LoadFrom(); 加载了复制的程序集,但该应用程序总是抛出一个异常,即我在 VS2010 中添加到引用的程序集未找到。我不能同时添加这两个引用,因为它们具有相同的命名空间和相同的方法。
除了在 VS2010 中为每个构建配置更改引用之外,还有更好的方法来处理这个问题吗?
预编译过程:
echo."$(ConfigurationName)"|findstr /C:"x64" >nul 2>&1
if not errorlevel 1 (
copy /Y "$(ProjectDir)lib\Magick.NET-x64.dll" "$(TargetDir)lib"
) else (
copy /Y "$(ProjectDir)lib\Magick.NET-x86.dll" "$(TargetDir)lib"
)
在 x86 构建上加载程序集:
if (IntPtr.Size == 4)
{
Assembly assembly = Assembly.LoadFrom("lib/Magick.NET-x86.dll");
}
例外:
System.BadImageFormatException
Magick.NET-x64, Version=6.0.0.0, Culture=neutral, PublicKeyToken=2004825badfa91ec not found
【问题讨论】:
-
部署两个 dll 会不会打扰您?然后,您可以使用 AppDomain.AssemblyResolve 在运行时加载正确的。
-
X64 版本为 10 MB,X86 版本为 8 MB。太多了,不能同时添加它们。
标签: c# .net visual-studio-2010