读取 txt 文件并在 class 中导入为 c# 代码

Reading txt file and import as a c# code in a class

我想知道这是否可能。例如 bootstrap 有新版本,我需要更改 cdn url 并在 asp.net 网络表单中为 RegisterBundles 重新构建项目。很简单 url 我们不需要为该问题重新构建项目。

是否可以读取 *.txt 文件并在 class 中用作 c# 代码。 Class会和以前一样,我们会活下来。

示例 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;
   }
}

不要为此使用 TXT 文件。将字符串作为 settings 放入您的 web.config,然后使用提供的 ASP.NET ConfigurationManager 来引用它们。

例如,参见:

首先,与 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.CSharpMicrosoft.CodeDom.Compiler 命名空间,根据 this tutorial。出于存档原因,我将尝试在此处进行总结。

  1. 将您的代码转换为字符串:var codeStr = File.ReadAllText("runtime compiled.cs");
  2. 创建提供者和编译器:var provider = new CSharpCodeProvider(); var parameters = new CodeParameters();
  3. 定义编译器的参数。听起来您肯定想将它编译到内存中,并且您需要引用您在该代码中使用的任何程序集:parameters.GenerateInMemory = true; parameters.ReferencedAssemblies.Add("necessaryAssembly.dll");
  4. 编译:var results = provider.CompileAssemblyFromSource(parameters, code);
  5. 检查错误
  6. 获取您的程序集:var assembly = results.CompiledAssembly; 这样您就可以获得您的类型:var program = assembly.GetType("first.program"); 这样您就可以获取您的方法:var main = program.GetMethod("Main");
  7. 然后您可以使用 Invoke 调用您的方法:main.Invoke(null, null);(查看 MethodInfo 上的参考资料。)