如何强制项目在C#中使用特定的程序集?

时间:2013-05-08 00:06:16

标签: c# .net .net-assembly

假设我有一个包含一些条件编译的类库,最终构建到 MyPortable.dll MyPortable.X.dll ,其中后者是编译的版本条件启用。

然后我的“Core”项目引用了“MyPortable.dll”。到现在为止还挺好。

但是,我的问题在于第三个项目(“App”),它引用了“Core”,但需要使用“MyPortable.X.dll”(这是“Core”使用的不同构建),但因为“核心”链接到“MyPortable.dll”,我的“应用程序”也使用相同的版本结束,而不是“MyPortable.X.dll”。

有没有办法做到这一点?代码是这样的:

MyPortable

namespace MyPortable
{
    public class Person {
        public string Name { get; set; }
    }

    public class Something {
        public List<Person> GetPersons() {
            List<Person> l = new List<Person>();
            l.Add(new Person { Name = "Name 1" });

#if PLATFORM_X
            l.Add(new Person { Name = "Name 2" });
#endif

            return l;
        }
    }
}

我首先在没有启用“PLATFORM_X”的情况下编译MyPortable,然后再次编译,这次打开了标志。文件引用如下(注意我直接引用Core.csproj):

Core\References\MyPortable.dll
App\
    \References\Core.csproj
    \References\MyPortable.X.dll

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么是的。编辑项目文件以包含条件MSBUILD语句,用于所需版本中所需的引用/运行时间。

我在这里得到了一个类似的答案:Visual Studio loading the right (x86 or x64) dll!

认为特别是使用Build Platform / Target作为变量。我假设您使用不同的目标来设置编译条件?

答案 1 :(得分:0)

您可以从配置文件控制程序集绑定,但我不确定这正是您要查找的内容。

基本上,您可以告诉应用程序绑定到特定程序集:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

我从位于此处的MSDN文档中获取了上述示例:

http://msdn.microsoft.com/en-us/library/2fc472t2.aspx

希望有所帮助,

克里斯