我的解决方案包括许多项目(比如proj1到proj50),每个项目都引用一系列完全相同的十几个程序集(比如asm1 thorugh 12)。这些程序集(asm1-asm12)在没有提示路径的情况下被引用。解决方案(包含proj1-proj50)由另一个组维护,因此不太需要更改它们(我不是proj i和asm的所有者,我只是想构建解决方案)。
我想做的是将十几个组装dll放在一个所有项目都能看到的地方,而不需要在每个项目中单独设置路径。换句话说,我想避免为每个解决方案树重复600次相同的任务。添加一个解决方案级别的“解决方案”就行了(所以我会为单个sln做一个单独的操作),不用更改解决方案就更好了(永久性的单一操作)。
答案 0 :(得分:4)
在解决方案文件夹中,如果添加一个名为Directory.Build.props
的文件,则会读入props文件并将其导入到同一目录中构建的任何项目或相对于该道具文件的较低项目,作为该文件中的第一项内容之一file(如果你使用Directory.Build.targets
,它将被导入为文件中的最后一个东西)
您可以将项目引用移出.csproj并移入该.props文件,它们将被导入,就像它们仍在.csproj中一样
以下是Directory.Build.props
的示例,该示例将导致解决方案中的每个项目都包含文件lib\ThirdParty.SomeLibrary.dll
作为参考。
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Reference Include="ThirdParty.SomeLibrary", Version=10.4.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
<HintPath>$(MSBuildThisFileDirectory)\lib\ThirdParty.SomeLibrary.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
您可以将Directory.Build.props文件包含为解决方案级别文件,您可以从visual studio中轻松打开和编辑该文件。