c# - 读取 txt 文件并在类中导入为 ac# 代码
问题描述
我想知道这是否可能。例如,bootstrap 有新版本,我需要更改 cdn url 并在 asp.net Web 表单中为RegisterBundles重新构建项目。这是一个简单的 url,我们不需要为该问题重新构建项目。
是否有可能读取 *.txt 文件并在类中用作 c# 代码。上课会和以前一样,我们会活下来。
示例RegisterBundles代码:
public class stylescriptbundle
{
public void RegisterBundles(BundleCollection bundles)
{
BundleTable.Bundles.Add(new ScriptBundle("/mybundle").Include(
"https://code.jquery.com/jquery-3.4.1.slim.min.js",
"https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js",
"https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
);
BundleTable.Bundles.UseCdn = true;
}
}
解决方案
首先,类似于 robbpriestley 所说的,您应该做的是从文件中读取字符串,以便将它们包含在包中。配置文件是最好的,但如果您对 .txt 非常感兴趣,请尝试以下操作:
var scripts = File.ReadAllLines("someConfigurationFile.txt");
var bundle = new ScriptBundle("/myBundle");
foreach(var script in scripts)
{
bundle.Include(script);
}
BundleTable.Bundles.UseCdn = true;
BundleTable.Bundles.Add(bundle);
(以上只是我的想法,您可能需要对其进行调整才能使其正常工作。)
也就是说,如果您仍想在运行时编译代码,您可以使用Microsoft.CSharp
和Microsoft.CodeDom.Compiler
命名空间,根据本教程。出于存档原因,我将在此处尝试对其进行总结。
- 将您的代码转换为字符串:
var codeStr = File.ReadAllText("runtime compiled.cs");
- 创建提供者和编译器:
var provider = new CSharpCodeProvider(); var parameters = new CodeParameters();
- 定义编译器的参数。听起来您肯定想将其编译到内存中,并且您需要引用您在该代码中使用的任何程序集:
parameters.GenerateInMemory = true; parameters.ReferencedAssemblies.Add("necessaryAssembly.dll");
- 编译:
var results = provider.CompileAssemblyFromSource(parameters, code);
- 检查错误
- 获取你的程序集:
var assembly = results.CompiledAssembly;
这样你就可以得到你的类型:var program = assembly.GetType("first.program");
这样你就可以得到你的方法:var main = program.GetMethod("Main");
- 然后您可以使用 Invoke 调用您的方法:(
main.Invoke(null, null);
查看MethodInfo上的参考。)
推荐阅读
- angular - 间歇性错误无法匹配任何路由单元测试Angular
- java - 如何在 java 中使用 Iterator 和 MaxHeapPriorityQueue 编写下一个方法
- statistics - 了解食物质地认知问题
- python - 在使用 Python tkinter 和海龟的迷宫游戏中获取“宝藏”(海龟)的坐标
- c++ - 如何检查鼠标是否点击了OpenGL中的多边形?
- html - 如何制作不可移动的 HTML 标头?
- c# - 我想让文本文件中的特定行出现在文本框中
- wxpython - 如何使 wx.Frame 闪烁
- c - 为什么我不能通过系统调用退出 shellcode?
- haskell - 无法将预期类型“IO [String]”与实际类型“[String]”匹配