如何在c#中强制项目使用特定的程序集
本文关键字:程序集 项目 | 更新日期: 2023-09-27 18:12:48
假设我有一个带有条件编译的类库,最终被构建为MyPortable.dll和MyPortable.X.dll,其中后者是启用条件编译的版本。
然后我有我的"核心"项目,它引用"MyPortable.dll"。到目前为止一切顺利。
然而,我的问题在于第三个项目("应用程序"),它引用了"Core",但需要使用"myportable . x.d dll"(这是"Core"使用的不同构建),但因为"Core"链接到"MyPortable.dll",我的"应用程序"也使用相同的版本结束,而不是"myportable . x.d 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;
}
}
}
我首先编译MyPortable而没有启用"PLATFORM_X",然后我再次编译,这次将标志打开。文件引用如下(请注意,我引用核心。csproj直接):
Core'References'MyPortable.dll
App'
'References'Core.csproj
'References'MyPortable.X.dll
如果我理解正确的话,是的。您可以编辑您的项目文件,以包含任何版本中所需的引用/运行时的条件MSBUILD语句。
我在这里有一个类似的答案:Visual Studio加载正确的(x86或x64) dll!
认为,特别是使用构建平台/目标作为变量。我假设您使用不同的target来设置编译条件?
您可以从配置文件控制程序集绑定,尽管我不确定这正是您正在寻找的。
基本上你可以告诉你的应用程序绑定到一个特定的程序集:
<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希望有帮助,
克里斯