.NET AnyCPU项目链接特定于平台的库

时间:2012-07-24 11:22:31

标签: .net x86 project 64-bit anycpu

  

可能重复:
  Loading x86 or x64 assembly

我正在尝试编译任何CPU .NET项目,但我必须链接具有x86和x64平台的不同版本的SQLite库。仅将DLL版本更改为x64没有帮助,应用程序无法启动,我需要使用x64引用重新编译代码。 当我添加x86和x64引用时,由于冲突,它无法编译。 我无法使用x86编译应用程序,因为我正在使用的系统COM库之一在WOW64下无效。

All 32-bit VSS applications (requesters, providers, and writers) must run as native 32-bit or 64-bit applications. Running them under WOW64 is not supported

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/eadf5dcd-fbd1-4224-9a56-b5843efebb15/

所以我需要构建任何CPU项目,但目前我看到的唯一解决方案是x86和x64的重复项目。还有什么更好的吗?

更新

当我在项目中引用x64库,但尝试加载x86库时,我得到以下异常。

The located assembly's manifest definition does not match the assembly reference.

1 个答案:

答案 0 :(得分:6)

主要问题是我使用不同版本的SQLite for x86和x64。 我添加了方法

static private Assembly SQLitePlatformSpecificResolve(object sender, ResolveEventArgs args)
{
    string platform = Environment.Is64BitProcess ? "x64" : "x86";
    string assemblyName = new AssemblyName(args.Name).Name;
    string assemblyPath = Path.Combine(
        Environment.CurrentDirectory, "SQLite", platform, assemblyName + ".dll");

    return !File.Exists(assemblyPath) ? null : Assembly.LoadFrom(assemblyPath);
}

并设置事件处理程序

AppDomain.CurrentDomain.AssemblyResolve += SQLitePlatformSpecificResolve;

在主应用程序入口点。 现在它相应地为x86平台和64位平台上的x64加载x86程序集。

感谢。