C# MS生成错误3181-引用的程序集出现问题

C# MS生成错误3181-引用的程序集出现问题,c#,.net,visual-studio-2010,msbuild,assemblies,C#,.net,Visual Studio 2010,Msbuild,Assemblies,想象一下以下场景: 程序集“Foo.dll”引用ADOX库(用于DDL和安全性的Microsoft ADO Ext.2.8),该库在VS 2010之前作为Interop.ADOX.dll添加到bin目录中。此引用的“本地副本”也设置为true 程序集“Bar.exe”既引用Foo.dll,又引用ADOX库,因为Bar.exe中需要它的某些功能 两个程序集都已签名 当Bar.exe中ADOX引用的“本地副本”也设置为true时,MS Build会生成警告3181-“两个或多个文件具有相同的目标

想象一下以下场景:

  • 程序集“Foo.dll”引用ADOX库(用于DDL和安全性的Microsoft ADO Ext.2.8),该库在VS 2010之前作为Interop.ADOX.dll添加到bin目录中。此引用的“本地副本”也设置为true

  • 程序集“Bar.exe”既引用Foo.dll,又引用ADOX库,因为Bar.exe中需要它的某些功能

  • 两个程序集都已签名

当Bar.exe中ADOX引用的“本地副本”也设置为true时,MS Build会生成警告3181-“两个或多个文件具有相同的目标路径”-这是有意义的

但是,当我将Bar.exe中ADOX引用的“Local copy”设置为false时,它可以正常编译,但在应用程序启动时,会出现一个错误,说明找不到程序集Interop.ADOX,并且程序集的清单定义与程序集引用不匹配

我想我遗漏了一些很简单的东西,但我无法用谷歌解决我的问题。我会很感激能为正确的方向提供解决方案或提示:)

干杯


Christian不确定EXE项目为什么没有创建互操作库。但不要把这个问题推下去。与其让EXE项目再次引用ADO,不如让它引用由DLL项目创建的互操作库


不在公共类中公开ADO类型是更好的解决方案。ADO Ext是一个实用程序包,您应该能够很好地封装它。

您确定在Foo.dll和Bar.exe(名称和版本)中引用了相同的程序集吗?Bar.exe引用的Foo.dll在哪里?在自定义目录及其依赖项中?此目录中Interop.ADOX.dll的版本是什么?我再次检查,是的,我引用的是同一版本的ADOX.dll(我的计算机上只有一个)。我直接从Foo项目的bin目录中获取Foo.dll的引用。在此目录中,Interop.ADOX.dll的版本为2.8,这对我来说很好,因为我也用版本2.8引用了ADOX.dll。感谢您的回复,我将尝试您的建议,引用Interop dll