将程序集的基本路径从bin目录更改到其他目录

本文关键字:其他 bin 程序集 路径 | 更新日期: 2023-09-27 18:01:23

我在C:'中有一个 test .cs文件。该测试文件从输入文件读取并将其写入输出文件。Test.cs

public class Test
{
    public static int Main(string[] args)
    {
        var reader = new StreamReader("in.txt");
        string input = reader.ReadLine();
        var writer = new StreamWriter("out.txt");
        writer.WriteLine(input);
        return 0;
     }
 }
这里应该注意的是,代码只使用文件名,而不是完整的文件路径,这意味着文件应该在程序运行的目录中。我在C:' 目录下创建了in.txt文件

现在,在 c:'Project'Runner.cs的解决方案中有一个名为Runner.cs的c#代码,该动态编译Test.cs代码并使用反射运行它。现在,当Test.cs运行时,它期望in.txt文件位于C:'Project'bin'Debug'in.txt中,但它实际上存在于C:'in.txt

所以,我的问题是,有没有一种方法可以使代码从C:'in.txt而不是从bin目录中获取文件,而不改变Test.cs代码文件中的文件路径。

编辑:我忘了说我为什么需要这个要求,这是我的错。

Test.cs文件来自网络。我觉得编辑这个文件并设置相应的文件路径不是一个好的选择。我想编译它并按原样运行。

我希望我讲清楚了。如果没有,请随时询问更多信息。

将程序集的基本路径从bin目录更改到其他目录

如果它像您在代码中显示的那样简单,那么切换CurrentDirectory就可以在此示例中工作:

var mainMembers = new CSharpCodeProvider()
    .CreateCompiler()
    .CompileAssemblyFromSource(
        new CompilerParameters { GenerateInMemory = true }
        , @"
        using System; 
        using System.IO;
        public class M {
            public static int Main() { 
                Console.WriteLine(""CurDir = ""+ Environment.CurrentDirectory); 
                var reader = new StreamReader(""in.txt"");
                string input = reader.ReadLine();
                var writer = new StreamWriter(""out.txt"");
                writer.WriteLine(input);
                return 0;
            }
        }")
     .CompiledAssembly
     .GetType("M")
     .GetMember("Main");
 // inspect
 Environment.CurrentDirectory.Dump("current");
 // keep 
 var oldcd = Environment.CurrentDirectory;
 // switch
 Environment.CurrentDirectory = "c:''temp";
 // invoke external code
 ((MethodInfo) mainMembers[0]).Invoke(null,null);
 // restore
 Environment.CurrentDirectory = oldcd;