2017-02-13 116 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文件複製到資產/插件文件夾。

有沒有辦法在複製之前等待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文件是從我的C#項目屬性中的PDB文件生成MDB文件作爲構建目標的一部分,其中複製將在MonoMdbGenerator完成執行之前不會執行。

<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> 

一些很好的讀取主題:

相關問題