根据构建配置加载不同的程序集

时间:2013-11-19 22:08:59

标签: c# .net visual-studio-2010

我在我的项目中使用Magick.NET,它渲染了游戏的地图。当我为x86处理器构建工具和为64位处理器构建X64版本的Magick.NET时,是否可以加载X86版本?我猜主要的问题是,不同版本的dll具有不同的身份。

我编写了一个prebuild事件,它根据所选的构建配置处理构建中的右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 build上加载程序集:

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

1 个答案:

答案 0 :(得分:1)

我的经验是,最好将x86和x64版本完全分开。因此,为每个平台/构建组合创建构建配置(通常,最后将有四个:x86调试,x86版本,x64调试,x64版本),并为解决方案中的每个项目的每个配置提供单独的输出目录。开始时需要付出一些努力,因为可能需要对项目文件进行一些手动调整(配置相关的引用提示路径),但最终会导致问题最少。