Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何指定公共源文件和属性并使它们显示在Visual Studio中_C#_Visual Studio_Msbuild - Fatal编程技术网

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

C# 如何指定公共源文件和属性并使它们显示在Visual Studio中,c#,visual-studio,msbuild,C#,Visual Studio,Msbuild,我有一个解决方案,其中有许多项目希望共享源文件和属性。例如,如果我将源文件放在一个公共的.props文件中,源文件会影响构建,但不会显示在VisualStudio中。一个简单的例子是: Scratch.csproj: <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/devel

我有一个解决方案,其中有许多项目希望共享源文件和属性。例如,如果我将源文件放在一个公共的.props文件中,源文件会影响构建,但不会显示在VisualStudio中。一个简单的例子是:

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已经声明了两次。但是,文件a.cs在visual studio解决方案中不存在。是否有一个很好的解决方案,使我们可以共享的属性和源文件也出现在解决方案中?我看到一种可能是使用a.csproj并将其添加到解决方案中,而不是a.props。然而,这也有问题。如果只使用该项目中的某些属性(取决于设置的条件),则不清楚哪个源文件或属性指向哪个项目。

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

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


属性在共享导入文件中应该可以,但请注意,VisualStudio不识别对导入的更改;您必须手动重新加载项目

为什么不把公共代码放在类库中呢?我们也希望这样做是为了属性,而不仅仅是代码文件。此外,共享代码可能不足以编译成单个模块,因此很难使用。您甚至可以将单个小型类构建到类库中。即使共享属性也无法正常工作。如果我将abc添加到a.props中,它将显示在VS中,但当我在VS中编辑它时,它会将其保存回csproj,而不是共享的props文件。是的,Visual Studio项目设计师操作的属性保存在项目文件中。最好的方法是将导入放在VisualStudio写入它们的位置之后,从而覆盖它们。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Compile Include="a.cs"/>
  </ItemGroup>
</Project>
namespace Scratch
{
  public class A {}
}