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

本文关键字:显示 Visual Studio 何指定 源文件 属性 | 更新日期: 2023-09-27 18:29:40

我有一个解决方案,其中包含许多想要共享源文件和属性的项目。例如,如果我把源文件放在一个公共的.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.道具:

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

a.cs,程序.cs:

namespace Scratch
{
  public class A {}
}

此代码将不会编译,因为类A已声明两次。但是,文件a.cs在visualstudio解决方案中没有出现。是否有一个很好的解决方案,以便我们可以在解决方案中显示共享属性和源文件?我看到了一种可能性,那就是使用.ssproj来代替.props,并将其添加到解决方案中。然而,这也存在问题。如果只使用该项目中的一些属性(取决于设置的条件),则不清楚哪个源文件或属性属于哪个项目。

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

Visual Studio没有处理MSBuild文件的全部灵活性。生成之所以有效,是因为Visual Studio调用MSBuild库,但项目设计器、解决方案资源管理器等无法表示它们尚未设计好的内容。

包含共享源的常见方法(即,如果您不将其作为单独的项目)是将文件作为链接添加到项目中:添加正在退出的项。。。,选择文件,而不是单击按钮,而是单击按钮右侧的箭头并添加链接。解决方案资源管理器用于识别链接的文件。

共享Import文件中的属性应该是可以的,但请注意,Visual Studio无法识别对Imports的更改;您必须手动重新加载项目。