假设我有一个包含一些条件编译的类库,最终构建到 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
答案 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
希望有所帮助,
克里斯