我有一个解决方案,包含许多想要共享源文件和属性的项目。如果我将源文件放在例如常见的.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并将其添加到解决方案中。但是,这也有问题。如果您只使用该项目中的某些属性(取决于设置的条件),则不清楚哪个源文件或属性转到哪个项目。
答案 0 :(得分:2)
Visual Studio没有处理MSBuild文件的完全灵活性。构建工作是因为Visual Studio调用MSBuild库,但项目设计人员,解决方案资源管理器等不能代表他们没有设计的东西。
包含共享源的常用方法(即,如果您不创建单独的项目)是将文件作为链接添加到项目中:添加退出项...,选择文件,而不是单击按钮,单击按钮右侧的箭头并添加链接。 Solution Explorer旨在识别链接文件。
共享导入文件中的属性应该没问题,但请注意Visual Studio不会识别对Imports的更改;你必须手动重新加载项目。