本书IronPython In Action具有以下代码,用于将python脚本读入字符串。 (第15.2章)
static string GetSourceCode(string pythonFileName)
{
Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(pythonFileName);
StreamReader textStreamReader = new StreamReader(stream);
return textStreamReader.ReadToEnd();
}
它将BasicEmbedding.source_code.py读取为字符串。我只是复制到我的代码,但我得到以下错误。 (只是从示例代码运行就可以了)
Unhandled Exception: System.ArgumentNullException: Argument cannot be null. Parameter name: stream at System.IO.StreamReader.Initialize (System.IO.Stream stream, System.Text.Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize) [0x00000] in :0 at System.IO.StreamReader..ctor (System.IO.Stream stream, System.Text.Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize) [0x00000] in :0 at System.IO.StreamReader..ctor (System.IO.Stream stream) [0x00000] in :0 at (wrapper remoting-invoke-with-check) System.IO.StreamReader:.ctor (System.IO.Stream) at BasicEmbedding.Program.GetSourceCode (System.String pythonFileName) [0x00000] in :0 at BasicEmbedding.Program.Main () [0x00000] in :0
我想我可以实现如下相同的功能,这可以正常工作。
static string GetSourceCode(string pythonFileName)
{
Assembly assembly = Assembly.GetExecutingAssembly();
string path = assembly.Location;
string rootDir = Directory.GetParent(path).FullName;
string pythonScript = Path.Combine(rootDir, pythonFileName);
StreamReader textStreamReader = File.OpenText(pythonScript);
return textStreamReader.ReadToEnd();
}
答案 0 :(得分:3)
对于原始代码,什么是“assembly.GetManifestResourceStream()”函数,为什么我会收到错误?:它查找编译成embedded resource的函数您的应用程序具有给定名称。最有可能的是,您没有添加具有该名称的资源。
我的新代码在执行结果方面是否与旧代码相同?:否。您从具有给定名称的磁盘读取文件,与程序集在同一目录中。原始文件从在程序集中读取资源。