我有几个项目涉及 SQL Server 组件。目前我维护了两个项目文件,分别引用相同的源文件,唯一不同的是对 SQL Server 组件的引用。
我是否可以只维护一个项目,并在我的构建脚本中动态指定所需的引用?
我是否可以只维护一个项目,并在我的构建脚本中动态指定所需的引用?
在寻找解决与您遇到相同问题的方案时,我发现了将条件放在ItemGroup上的提议解决方案。但这会有一个副作用,因为在Visual Studio引用中,我可以看到两个引用,这也影响了ReSharper。
最终我使用了Choose When Otherwise,现在ReSharper和Visual Studio都不再显示两个引用了。
<Choose>
<When Condition=" '$(Configuration)' == 'client1DeployClickOnce' ">
<ItemGroup>
<ProjectReferenceInclude="..\client1\app.Controls\app.Controls.csproj">
<Project>{A7714633-66D7-4099-A255-5A911DB7BED8}</Project>
<Name>app.Controls %28Sources\client1\app.Controls%29</Name>
</ProjectReference>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<ProjectReference Include="..\app.Controls\app.Controls.csproj">
<Project>{2E6D4065-E042-44B9-A569-FA1C36F1BDCE}</Project>
<Name>app.Controls %28Sources\app.Controls%29</Name>
</ProjectReference>
</ItemGroup>
</Otherwise>
</Choose>
你可以在我的博客文章中阅读更多相关信息:[在MSBuild项目文件中使用条件的ProjectReference][https://laurentkempe.com/2009/12/03/ProjectReference-with-Condition-in-your-MSBuild-project-files/]
几乎每个 MSBuild 元素都可以与 条件 关联。我建议您编辑项目文件(它本身是一个 MSBuild 文件),并将所有 SQL 服务器引用放置在一个 ItemGroup 中,该 ItemGroup 具有一个条件,例如:
<ItemGroup Condition="'$(SqlServerTargetEdition)'=='2005'">
<!-- SQL Server 2005 References here -->
<Reference Include="..."/>
</ItemGroup>
另一个针对 Sql server 2008 的 ItemGroup:
<ItemGroup Condition="'$(SqlServerTargetEdition)'=='2008'">
<!-- SQL Server 2008 References here -->
<Reference Include="..."/>
</ItemGroup>