使 AppHost 支持从其他路径加载程序集
2025年1月26日小于 1 分钟约 202 字
使 AppHost 支持从其他路径加载程序集
提示
在继续前,希望您具备一些基本的 MSBuild 相关知识,
因为本文不会解释 MSBuild 基本知识。
什么是 AppHost
实现
通过分析 .Net SDK 的代码可知, AppHost 是由一个叫做 _CreateAppHost 的 Target 创建的。
Target _CreateAppHost 会在通常是 obj 文件夹下创建一个名为 apphost[.exe] 的文件。
Target _ComputeNETCoreBuildOutputFiles 会负责将 apphost[.exe] 移动至输出文件夹。
只需要替换掉原有的 _CreateAppHost 就可以实现从其他路径加载程序集了。
根据研究,将 Task CreateAppHost 的属性 AppBinaryName 换掉即可
<Project>
<Target Name="_CreateAppHost_Hack" AfterTargets="_CreateAppHost">
<CreateAppHost AppHostSourcePath="$(AppHostSourcePath)"
AppHostDestinationPath="$(AppHostIntermediatePath)"
AppBinaryName="<PathTo>\$(AssemblyName)$(TargetExt)"
IntermediateAssembly="@(IntermediateAssembly->'%(FullPath)')"
WindowsGraphicalUserInterface="$(_UseWindowsGraphicalUserInterface)"
Retries="$(CopyRetryCount)"
RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
EnableMacOSCodeSign="$(_EnableMacOSCodeSign)"
/>
</Target>
</Project>