2017-12-19 16 views
5

this解決方法2つのアプリケーションがあります:AppAAppB共有クラスライブラリSharedです。私はPowerShellnodeのスクリプト(これは他のソリューションにも公開されています)と並行してビルド/実行を自動化しようとしました。私は両方の--no-dependencies--no-restoreフラグを使用していますが、断続的に私が取得:ドットネットコアは並列または同時に構築されます

'CSC : error CS2012: Cannot open \'C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\obj\\Debug\\netcoreapp2.0\\Shared.dll\' for writing -- \'The process cannot access the file \'C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\obj\\Debug\\netcoreapp2.0\\Shared.dll\' because it is being used by another process.\' [C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\Shared.csproj]\r\n' 

のPowerShell: ./build.ps1 enter image description here

ノード: 実行プロジェクトbuild-scriptまたはnode ./build-script/app.js enter image description here

--no-dependenciesフラグが設定されていても、Sharedプロジェクトのビルディングはなぜですか?並列または同時にどのように構築するのですか?エラーCS2012用

+0

ビルドプロセスをどのように呼びますか?あなたのコードを投稿してください。 – TheIncorrigible1

+0

@ TheIncorrigible1すべてのコードがレポにあります –

+0

リンクに気づかなかったので、ありがとう – TheIncorrigible1

答えて

3

説明:プロセスは、私はあなたの問題とProcess Monitorは、両方のプロセスが読み取りのために同時にshared.dllを開くことを示して再現することができ、ファイル

にアクセスすることはできません。これはあなたが説明した問題につながります。 documentationは(以下抜粋を参照)を示しているように、異なるプロセスから同じファイルを読み込むが、

FileShare.Readを使用して行うことができ、csc.exeによって行わませようです。これはcsc.exeの短所であり、近い将来変更される予定はありません。

読み取りのためにファイルを開くことができます。このフラグに が指定されていない場合、ファイルを閉じるまで(このプロセスでは または別のプロセス)、ファイルを開く要求は失敗します。ただし、このフラグが指定されている場合でも 場合でも、ファイルにアクセスするためには追加のアクセス許可が依然として になることがあります。

ソリューション

代わりに並列建物を達成するためにStart-Processを使用して、あなたは、箱から出して、これをサポートしているのMSBuildを使用することができます。

並列ビルドは/maxcpucount -switchとBuildInParallelのパラメータで、MS build documentationに記載されているようにmsbuildでサポートされています。

パラレルビルドはコマンドラインで/maxcpucount -switchを使用することによって有効になります。

DOTNETのMSBuildの\ ParallelBuildAB.csproj /ターゲット:ビルド/復元:偽 /maxcpucount:2

ほかプロジェクトファイルParallelBuildAB.csprojにBuildInParallelの-taskパラメータも使用する必要があります。AppA.csprojAppB.csprojは、次のように参照されています。

<?xml version="1.0"?> 
<Project name="system" default="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="build"> 
     <MSBuild BuildInParallel="true" Projects="./AppA/AppA.csproj;./AppB/AppB.csproj" Targets="Build"/> 
    </Target> 
</Project> 
+0

2つのプロジェクトを並列に構築するには、新しいプロジェクト 'ParallelBuildAB.csproj'を作成する必要がありますか?同じコマンドからそれらを実行することも可能ですか? –

関連する問題