将程序集的基本路径从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文件来自网络。我觉得编辑这个文件并设置相应的文件路径不是一个好的选择。我想编译它并按原样运行。 我希望我讲清楚了。如果没有,请随时询问更多信息。
如果它像您在代码中显示的那样简单,那么切换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;