我有一个配置的文件,叫做blue,然后我把它包含的工程所生成的dll里面了。
然后主程序要调用这个dll,而这个dll要使用blue文件,那么就要在用户那边生成这个文件。
代码:
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
string file = asm.GetName().Name + ".blue";
System.IO.Stream str = asm.GetManifestResourceStream(file);
System.IO.StreamReader sr = new System.IO.StreamReader(str);string localfile = "localblue";
System.IO.StreamWriter sw = new System.IO.StreamWriter(localfile);string text = sr.ReadToEnd();
sw.Write(text);sw.Close();
sr.Close();文件是有生成,但是大小不一样,变小了,有谁知道可能是什么问题吗?该怎么处理?
最好能有点代码。

解决方案 »

  1.   

    System.IO.StreamReader sr = new System.IO.StreamReader(str, Encoding.xxxx);在 Encoding.xxx 这里加上你原来文件的编码试试看
      

  2.   

    如果还不行用BinnaryReader br = new BinnaryReader(str); 看看
      

  3.   

    Stream streamObj = this.GetType().Assembly.GetManifestResourceStream("Test_ExeInResource.AllTest.exe");byte[] b = new byte[streamObj.Length];
    streamObj.Read(b, 0, b.Length);FileStream fileObj = new FileStream("aa.exe", FileMode.CreateNew);
    BinaryWriter writerObj = new BinaryWriter(fileObj);
    fileObj.Write(b, 0, b.Length);fileObj.Close();
    writerObj.Close();
    streamObj.Close();上面的代码是嵌入了一个名叫AllTest.exe的文件,编译为资源文件,
    然后读取出来保存到本地的代码,希望对你有帮助。
      

  4.   

    这有一个小问题,你最后用fileObj.Write(b, 0, b.Length);
    好像writerObj没什么作用啊。
    好像可以用BinaryWriter也能成功,还是说一定要BinaryWriter?
      

  5.   

    好像可以不用BinaryWriter也能成功,还是说一定要BinaryWriter?
      

  6.   

    又看了一下,的确是不用BinaryWriter,抱歉给你造成的疑惑。
      

  7.   

    我觉得代码实现什么是次要的,关键是在这样的应用中你的系统设计有点问题。
    象blue这样的配置文件不应该打到dll中,如果没有安全需要比较高的信息,直接打包到工程安装包;如果有安全需要较高的信息,做加密解密再打包到安装包。
    如果是B/S结构,放在服务端然后每个客户端只保留少量的特征信息或变动的信息即可。楼主这样做最大的问题在于提高了复用的难度。
      

  8.   

    不太明白zeusvenus的意思。
    我开发的是winform,然后使用了web service。
    在整个solution中,用到一个XPExplorer的project,这个project的作用就是可以把form的界面设置成一种风格,这个project被编译成dll
    这个project要调用一些储存了各种风格的配置文件,每种风格都储存在一个.dll文件中,比如blue.dll或者xbox.dll。参数就是这个风格文件的文件名。那我运行程序的时候,就是调用那个XPExplorer,然后给他一个风格文件的文件名。这个工程的调用方法部分不好再作修改,就是说只能传给它要用的文件名。
    然后我的程序最后要放在iis上,然后用户直接用http://xxx.xx/ui/main.exe来访问就行了。用户访问了http://xxx.xx/ui/main.exe后,.net的framework可以自动把需要用到的库下载到assembly\download里面,比如XPExplorer.dll。
    现在问题是,需要用到的blue.dll不会被下载到用户那里,因此XPExplorer就没办法调用到blue.dll,因此就出错。那么你认为该怎么处理这样的问题呢?
      

  9.   

    这个工程的调用方法部分不好再作修改,就是说只能传给它要用的文件名。那你只能这样了,否则按常规你配置文件不要打包到dll中,用加密的文本ini或xml文件存。
      

  10.   

    楼主没必要把文件打包到dll中.
    建议在主项目中建个目录
    下面专门存文件.
    dll读这些文件就行了.可以用Applicatin.AppDomain....获取文件路径.
      

  11.   

    主要的问题就是:
    我做好的工程发布在iis上面,有个main.exe主程序,它需要用到一个blue.xxx文件。这个文件如果不打包到dll中,就是跟mail.exe在同一个目录下。然后用户是用ie来访问的,用户直接在ie里面输入http://xxx.xxx/ui/main.exe就可以运行了,
    这个url的前面部分是根据发布人员发布的,可以发布在ui虚拟目录下,也可以是别的名字,例如可以发布成http://xxx.xxx/app/main.exe来访问。就是说我不能在程序里写到http://xxx.xxx/ui/blue.dll下载这个文件。用户访问了http://xxx.xxx/ui/main.exe后,程序就可以在用户屏幕上运行。怎么样在程序运行后,把blue.xxx这个文件下载到访问者本地来?就是装了.net framework,用ie访问的任何人。