2017-02-13 15 views
0

Unityの私のMonoBehavioursのソースコードは、Assetsフォルダ内のスクリプトではなく、プラグインとして追加するDLLをコンパイルしたものです。Visual StudioとUnityでMDBファイルを使用したビルド後のイベント

Visual StudioでC#プロジェクトのビルド後のイベントを追加しました。何か変更があるたびにDLLファイルとMDBファイルをコピーする必要があります。

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)\..\Assets\Plugins\$(ProjectName).dll" 
copy /Y "$(TargetDir)$(ProjectName).dll.mdb" "$(SolutionDir)\..\Assets\Plugins\$(ProjectName).dll.mdb" 

魅力的なように...ほとんど。私が遭遇している問題は、DLLがビルドされ、次にこのコマンドが実行されますが、MDBファイルにはまだ更新する時間がないため、古いMDBファイルがAssets/Pluginsフォルダにコピーされます。

コピーする前にMDBファイルが更新されるのを待つ方法はありますか?

+0

あなたは何でMDBを更新しますか? – Steve

+0

MDBファイルは、特定のバージョンのDLLに厳密に依存しています.DLLを再ビルドするたびにVisual Studioで再生成する必要があります。そうしないとUnityでエラーが発生します。 これは、DLLが構築された後に行われるように見えますが、これは意味があります。 DLLがビルドされてからわずか数秒後に完了しますが、ビルド後のイベントは既に実行されています。 – Helena

+0

あなたの幸せはここにあります:http://stackoverflow.com/questions/1584062/how-to-wait-for-thread-to-finish-with-net –

答えて

0

私は今、解決策を持っています。基本的に、DLLとMDBファイルのコピーは、MonoMdbGeneratorが実行されるまでコピーが実行されないビルドターゲットとして、C#プロジェクトプロパティのPDBファイルからMDBファイルを生成するプロセスの一部です。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<Target Name="AfterBuild"> 
    <CallTarget Targets="GenerateMonoSymbols" Condition=" Exists('$(OutputPath)\$(AssemblyName).pdb') " /> 
</Target> 
<Target Name="GenerateMonoSymbols"> 
    <Message Text="$(ProjectName) -&gt; $(TargetPath).mdb" Importance="High" /> 
    <Exec Command="$(MonoMdbGenerator) $(AssemblyName).dll" WorkingDirectory="$(MSBuildProjectDirectory)\$(OutputPath)" /> 
    <CallTarget Targets="CopyDLL" /> 
</Target> 
<Target Name="CopyDLL"> 
    <Copy SourceFiles="$(OutputPath)\$(AssemblyName).dll" DestinationFolder="$(SolutionDir)..\Assets\Plugins\$(ProjectName)" /> 
    <Copy SourceFiles="$(OutputPath)\$(AssemblyName).dll.mdb" DestinationFolder="$(SolutionDir)..\Assets\Plugins\$(ProjectName)" /> 
</Target> 

いくつかの良いは、被写体に読み取ります

関連する問題