【问题标题】:Post-build events with MDB files in Visual Studio and Unity在 Visual Studio 和 Unity 中使用 MDB 文件构建后事件
【发布时间】:2017-02-13 07:46:36
【问题描述】:

我在 Unity 中的 MonoBehaviours 的源代码不是 Assets 文件夹中的脚本,而是我添加为插件的已编译 DLL。

我在 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 文件更新?

【问题讨论】:

  • 你用什么更新MDB?
  • MDB文件严格依赖于特定版本的DLL,每次重建DLL时都必须由Visual Studio重新生成,否则会导致Unity出错。看起来,这是在构建 DLL 之后完成的,这是有道理的。因此,它将在 DLL 构建后几秒钟内完成,但随后构建后事件已经运行。

标签: c# visual-studio unity3d


【解决方案1】:

我现在有了可行的解决方案。基本上,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>

关于这个主题的一些好读物:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多