如何指定公共源文件和属性并使它们出现在Visual Studio中

时间:2014-11-07 18:02:18

标签: c# visual-studio msbuild

我有一个解决方案,包含许多想要共享源文件和属性的项目。如果我将源文件放在例如常见的.props文件中,则源文件会影响构建但不会显示在Visual Studio中。一个简短的例子是:

Scratch.csproj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <ItemGroup>
    <Compile Include="Program.cs"/>
  </ItemGroup>

  <Import Project="a.props" />
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

A.props:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Compile Include="a.cs"/>
  </ItemGroup>
</Project>

a.cs,Program.cs:

namespace Scratch
{
  public class A {}
}

此代码无法编译,因为A类已声明两次。但是,文件a.cs在visual studio解决方案中无处可见。是否有一个很好的解决方案,以便我们可以拥有也出现在解决方案中的共享属性和源文件?我看到了一种可能性,而不是a.props,使用a.csproj并将其添加到解决方案中。但是,这也有问题。如果您只使用该项目中的某些属性(取决于设置的条件),则不清楚哪个源文件或属性转到哪个项目。

1 个答案:

答案 0 :(得分:2)

Visual Studio没有处理MSBuild文件的完全灵活性。构建工作是因为Visual Studio调用MSBuild库,但项目设计人员,解决方案资源管理器等不能代表他们没有设计的东西。

包含共享源的常用方法(即,如果您不创建单独的项目)是将文件作为链接添加到项目中:添加退出项...,选择文件,而不是单击按钮,单击按钮右侧的箭头并添加链接。 Solution Explorer旨在识别链接文件。

共享导入文件中的属性应该没问题,但请注意Visual Studio不会识别对Imports的更改;你必须手动重新加载项目。