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

时间:2018-07-27 17:22:53

标签: c# .net visual-studio nuget .net-assembly

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

现在是问题所在。我有使用System.Windows.Interactivity.dll的核心程序。似乎父程序也使用此功能,但是父级的早期支持版本使用.NET 4.0交互性,而后来的受支持版本使用.NET 4.5版本。

如果我使用4.0版或4.5版进行编译,则我的核心软件可以工作,但是当它在父级中运行时,如果我具有4.5版,则它会在较早的版本中破坏,如果我安装了4.0版,则在较新的版本中会破坏。 ..

有没有一种方法可以创建两个可以在不同dll文件上编译的不同版本?我猜我将需要根据我想要的位置来设置两个不同的安装位置?

1 个答案:

答案 0 :(得分:2)

这将满足您的要求:

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

enter image description here

在我的示例中,我将使用 TheNet40one TheNet45One

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>

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

现在,您可以在两个构建配置之间切换,知道它们每个都将链接到正确的DLL文件中。

enter image description here