gpt4 book ai didi

c# - 使用 CodeAnalysis.Compilation.Emit 编译时复制 App.config

转载 作者:行者123 更新时间:2023-12-03 03:08:21 25 4
gpt4 key购买 nike

我正在使用 Roslyn CodeAnalysis API 编译 C# 项目,如以下片段所示:

...
EmitResult emitResult = null;
using (FileStream outputFileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
emitResult = compilation.Emit(outputFileStream, null);
}
...

这非常有效。但是,当我想编译包含 App.Config 文件的可执行项目时,该文件不会在输出目录中发出(类似于通过 Visual Studio 编译时发出的方式),如果您想解析某些文件,这是有问题的在运行时从该文件进行配置。

我意识到默认情况下不应发出它,但我可能需要启用某些选项,或者以某种方式从 Project 对象中提取 App.Config 路径并自己发出它?我似乎找不到与此相关的任何信息,并且 Project 类似乎不包含有关配置文件的任何信息(除非我遗漏了某些内容)。

我需要使用一些特定的 API 来实现上述目标吗?有任何指向可用的现有代码的指针吗?

非常感谢!

最佳答案

Roslyn 不是构建系统,而是编译器。它只能将代码转换为程序集(和PDB)。当您在 Visual Studio 中编译 .csproj 时,MSBuild 会读取项目文件中的所有属性和项,并将它们转换为一系列步骤,其中包括调用 Roslyn 编译器、复制 App.config 文件到输出目录,复制引用等。

虽然 Roslyn 确实可以读取 MSBuild 项目文件,但它仅将此信息用于编译目的,例如查找引用。

因此,如果您要动态编译程序集,则必须自己复制 App.config 文件(注意 - VS 不会发出此文件 - 它只是复制并重命名它) .

关于c# - 使用 CodeAnalysis.Compilation.Emit 编译时复制 App.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com