プロジェクトがソリューション用に作成されたかのように聞こえるため、ソリューションの外部でビルドしようとすると、ソリューションがすべてのプロジェクトの場所を解決する接着剤であるため、プロジェクトが壊れます。
コマンド ラインからソリューションをビルドした場合、機能しますか?
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>
ここで、ソリューション名を指定してビルドできることをテストしてから、個々のプロジェクトに移動してコンパイルします。