每个构建引用不同的程序集版本?

Reference different assembly version per build?

我有一个程序主要是另一个程序的插件。我在单个项目中有我的核心逻辑,UI 等,也可以独立于父程序使用。然后我有一个 'connector' 块将我的程序连接到父程序,本质上是两者之间的通信器。我也支持多个版本的父软件。

问题来了。我的核心程序使用 System.Windows.Interactivity.dll。父程序似乎也使用这个,但早期支持的父程序版本使用.NET 4.0 版本的交互,后来支持的版本使用.NET 4.5 版本。

如果我使用 4.0 版本或 4.5 版本编译,我的核心软件可以工作,但是当它在父级中 运行 时,如果我有 4.5 版本,它会在早期版本中中断,如果我安装了 4.0它在更高版本中中断...

有没有一种方法可以创建两个不同的构建版本来编译不同的 dll 文件?我想我需要有两个不同的安装位置,具体取决于我想要的安装位置?

这会做你想做的事:

1) 为每个添加新配置(您通常在调试和发布之间选择)。

在我的示例中,我将使用 TheNet40oneTheNet45One

2) 编辑项目的 .csproj 文件并添加以下内容(我只演示 AnyCPU):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TheNet40One|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\TheNet40One\</OutputPath>
    ...
</PropertyGroup>

3) 然后添加条件引用(显然我在猜测你的.dll 名称):

<ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    ...
    <Reference Include="40.dll" Condition="'$(Configuration)'=='TheNet40One'" />
    <Reference Include="45.dll" Condition="'$(Configuration)'=='TheNet45One'" />
</ItemGroup>

我已经使用 ... 替换了其他常用设置和参考 - 不要忘记替换它们。

现在您可以在两种构建配置之间切换,知道它们各自 link 在正确的 DLL 文件中。