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

本文关键字:程序集 项目 | 更新日期: 2023-09-27 18:12:48

假设我有一个带有条件编译的类库,最终被构建为MyPortable.dllMyPortable.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

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

如果我理解正确的话,是的。您可以编辑您的项目文件,以包含任何版本中所需的引用/运行时的条件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

希望有帮助,

克里斯