0

假设我有一个带有一些条件编译的类库,最终构建为MyPortable.dllMyPortable.X.dll,后者是启用条件编译的版本。

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

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

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

我的便携式

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
4

2 回答 2

1

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

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

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

于 2013-05-08T00:15:12.720 回答
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

希望有帮助,

克里斯

于 2013-05-08T00:18:00.437 回答