2013-06-13 19 views
3

考慮下面的控制檯應用程序創建的類型:序列化中的ScriptEngine會議

using System; 
using System.IO; 
using System.Text; 
using System.Xml.Serialization; 
using System.Reflection.Emit; 
using System.Reflection; 
using Roslyn.Scripting.CSharp; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var dynAssembly = AssemblyBuilder 
      .DefineDynamicAssembly(
      new AssemblyName("TestAssembly"), 
      AssemblyBuilderAccess.RunAndSave); 
     var dynModule = dynAssembly.DefineDynamicModule("TestModule"); 
     var typeBuilder = dynModule.DefineType("Test", TypeAttributes.Public); 
     var dynamicType = typeBuilder.CreateType(); 
     var serializer = new XmlSerializer(dynamicType); 
     var sBuilder = new StringBuilder(); 
     serializer.Serialize(
      new StringWriter(sBuilder), 
      Activator.CreateInstance(dynamicType)); 
     Console.WriteLine(sBuilder.ToString()); 

     var engine = new ScriptEngine(); 
     engine.AddReference(Type.GetType("System.Object").Assembly.Location); 
     engine.ImportNamespace("System"); 
     var roslynType = engine 
      .CreateSession() 
      .Execute<Type>("public class Test{public Test(){}};typeof(Test)"); 
     serializer = new XmlSerializer(roslynType); // FileNotFoundException 
    } 
} 

當試圖實例化一個XmlSerializer並傳遞roslynType的說法,發生以下運行時異常:

能不加載文件或程序集 '* 875699ae-0282-43b7-8ca3-a2f223a3d567-#1UD.XmlSerializers'或其依賴項的一個 。文件名,目錄名稱或卷標 語法不正確。

的FusionLog顯示以下內容:

=== Pre-bind state information === 
LOG: User = *** 
LOG: DisplayName = ℛ*12d7c994-3636-4081-93d3-6bfe43cc8988-#1UD.XmlSerializers 
(Partial) 
WRN: Partial binding information was supplied for an assembly: 
WRN: Assembly Name: ℛ*12d7c994-3636-4081-93d3-6bfe43cc8988-#1UD.XmlSerializers | 
    Domain ID: 1 
WRN: A partial bind occurs when only part of the assembly display name is provided. 
WRN: This might result in the binder loading an incorrect assembly. 
WRN: It is recommended to provide a fully specified textual identity for the 
    assembly, 
WRN: that consists of the simple name, version, culture, and public key token. 
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more 
    information and common solutions to this issue. 
LOG: Appbase = *** 
LOG: Initial PrivatePath = NULL 
Calling assembly : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: *** 
LOG: Using host configuration file: 
LOG: Using machine configuration file from 
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, 
    or location-based assembly bind). 
LOG: Attempting download of new URL 
    file:///c:/users/userName/documents/visual studio 2012/ 
    Projects/ConsoleApplication147/ConsoleApplication147/bin/Debug/ 
    ℛ*12d7c994-3636-4081-93d3-6bfe43cc8988-#1UD.XmlSerializers.DLL. 
ERR: A fatal error occurred when retrieving next codebase for download (hr = 0x8007007b). 

是否可以序列化roslynType的實例?如果是這樣,我錯過了什麼步驟?有沒有完全不同的方法?

回答