听起来好像项目是为解决方案创建的,所以当您尝试在解决方案之外构建时,它们会中断,因为解决方案是解决所有项目位置的粘合剂。
如果您从命令行构建解决方案,它是否有效?
msbuild.exe solutionname.sln
如果是这样,请关闭 Visual Studio,打开 Notepad++ 并准备开始编辑一些 XML!
消除使用绝对路径,优先选择解决方案根文件夹中的相对路径。
首先,在您的登记根目录中创建一个名为“Common.props”的通用属性文件夹,并添加以下标记:
<Project ToolsVersion="4.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')" />
<PropertyGroup>
<SlnRoot>$( [MSBuild]::GetDirectoryNameOfFileAbove( $(MSBuildThisFileDirectory), Common.props ) )</SlnRoot>
</PropertyGroup>
</Project>
然后,将此标记添加到每个成员项目文件中。
<PropertyGroup>
<CommonPropsFolder>$([MSBuild]::GetDirectoryNameOfFileAbove( $(MSBuildProjectDirectory) ,Common.props))</CommonPropsFolder>
</PropertyGroup>
<Import Project="$(CommonPropsFolder)\Common.props" />
(这应该是出现在 <Project /> 节点之后的第一个 XML 节点)
现在在受影响的 .csproj 文件中找到所有 <ProjectReference /> 节点。修改引用,使路径相对于解决方案根目录并以新的 $(SrcRoot) MsBuild 属性为前缀。
例如从
<ProjectReference Include="..\..\Tools\Build\Common.csproj">
<Project>{deadbeef-dead-beef-dead-beefdeadbeef}</Project>
<Name>Common</Name>
</ProjectReference>
到
<ProjectReference Include="$(SlnRoot)\Tools\Build\Common.csproj">
<Project>{deadbeef-dead-beef-dead-beefdeadbeef}</Project>
<Name>Common</Name>
</ProjectReference>
现在进行测试以确保您可以通过指定解决方案名称来构建,然后导航到并编译单个项目。