0

我正在将公司产品从 .Net 4.8 移植到 .Net core 6 中。在解决方案中,有一个输出目录,其中包含:Assemblies、Configuration、Log、Resources 目录,并且只有启动器项目的 .exe、.pdb 和 .exe.config。Dll 在 Assemblies 目录中,我绝对需要复制相同的结构。

在启动器项目 .csproj 文件中,我们设置了:

<OutputPath>$(SolutionDir)\$(Configuration)</OutputPath>

在其他方面:

<OutputPath>$(SolutionDir)\$(Configuration)\Assemblies</OutputPath>

在编译过程中,VS Studio Professional 2022 会继续复制 ProjectReference 包含的项目的 .dlls/.pdbs,并以递归方式越来越多地复制所有 .dlls。为了避免这种行为,我尝试了很多方法,例如使用所有这些属性(也在不同的设置组合中:无,全部,编译......)但问题仍然存在:

<CopyLocalLockFileAssemblies>
<CopyLocal>
<CopyLocalSatelliteAssemblies>
<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>
<AppendTargetFrameworkToOutputPath>

目前,我正在 windows 中构建,但将来也会有一些 linux 机器必须构建解决方案,所以我需要一种在所有环境中都可以工作的方法。

有可能做到吗?

加载程序集不是问题,我已经修改了 AssemblyLoadContext.Default.Resolving,如果我从输出目录中手动删除 dll,应用程序可以工作,但我需要比构建后删除脚本更“优雅”的东西(构建后事件) .

4

1 回答 1

0

当您提到“构建后删除脚本”时,是否暗示使用构建后事件调用了一个?我意识到这可能与您的想法不完全一样,因为它实际上是一个脚本,每次构建项目后都会调用它。

尽管如此,它与手动运行脚本并不完全相同,所以如果您在寻找更好的选项时遇到困难,这可能是一种替代方法吗?

为您的项目打开属性,并查找以下内容:(
可能还想查看构建事件的文档

在此处输入图像描述

于 2022-02-02T20:51:35.010 回答