[英]How to load assemblies and invoke their methods without compiling in .NET Core
[英].Net core 6: How to have output directory without assemblies
我正在将公司产品从.Net 4.8 移植到.Net core 6 中。 在解决方案中,有一个 output 目录,其中包含:Assemblies、Configuration、Log、Resources 目录以及启动器项目的 only.exe、.pdb 和.exe.config。 Dll 在 Assemblies 目录中,我绝对需要复制相同的结构。
在启动器 project.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,如果我从 output 目录中手动删除 dll,应用程序可以工作,但我需要比构建后删除脚本更“优雅”的东西。
当您提到“构建后删除脚本”时,是否暗示使用构建后事件调用了一个? 我意识到这可能与您的想法不完全一样,因为它实际上是一个脚本,每次构建项目后都会调用它。
尽管如此,它与手动运行脚本并不完全相同,所以如果您在寻找更好的选项时遇到困难,这可能是一种替代方法吗?
打开项目的属性,然后查找:
(您可能还想查看构建事件的文档)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.