<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.apple-style-span
        {mso-style-name:apple-style-span;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.pln
        {mso-style-name:pln;}
span.pun
        {mso-style-name:pun;}
span.str
        {mso-style-name:str;}
span.typ
        {mso-style-name:typ;}
span.kwd
        {mso-style-name:kwd;}
span.com
        {mso-style-name:com;}
span.EmailStyle27
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">The usual solution to this is to do the add reference from the C# host rather than from IronPython.&nbsp; You can do that with:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">engine.Runtime.LoadAssembly(typeof(Entity.TestPy).Assembly);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">And then just get rid of the sys.path.append/clr.AddReferenceToFile.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">There are some similar questions on StackOverflow as well if you want to vote up the answers
</span><span style="font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><a href="http://stackoverflow.com/questions/3009213/c-ironpython-interop-with-shared-c-class-library/3011147#3011147">http://stackoverflow.com/questions/3009213/c-ironpython-interop-with-shared-c-class-library/3011147#3011147</a>
 [perfect match]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><a href="http://stackoverflow.com/questions/3305792/ironpython-returns-wrong-type-when-using-class-in-classy-library/3309873#3309873">http://stackoverflow.com/questions/3305792/ironpython-returns-wrong-type-when-using-class-in-classy-library/3309873#3309873</a>
 [very similar]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> users-bounces@lists.ironpython.com [mailto:users-bounces@lists.ironpython.com]
<b>On Behalf Of </b>kevin won<br>
<b>Sent:</b> Wednesday, September 15, 2010 4:09 PM<br>
<b>To:</b> users@lists.ironpython.com<br>
<b>Subject:</b> [IronPython] assembly context binding in appDomain and .NET interop<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">New to the list &amp; hoping an IronPython expert might be able to shed some light on an vexing IronPython runtime problem I'm having.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">I've actually posted this question in StackOverflow to no avail here:&nbsp;<a href="http://stackoverflow.com/questions/2785252/c-4-0-casting-dynamic-to-static">http://stackoverflow.com/questions/2785252/c-4-0-casting-dynamic-to-static</a>&nbsp;there
 is a lot more details about this problem there.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">essentially what I'm having problems with I think boils down to an assembly binding context mismatch. However, I have totally run out of ideas on how to resolve the problem.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">I have a C# assembly I reference in IronPython. I new up an object defined in that assembly in IronPython:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<pre style="margin-bottom:7.5pt;line-height:13.5pt;background:#EEEEEE;vertical-align:baseline;border-style:initial;border-color:initial;background-image:initial;background-attachment:initial;background-origin: initial;background-clip: initial;overflow-x: auto;overflow-y: auto;max-height: 600px;background-position:initial initial;background-repeat:initial initial"><span style="font-size:10.5pt;font-family:Consolas"><o:p>&nbsp;</o:p></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">sys</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">path</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">append</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">(</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">r</span></span><span class="str"><span style="font-size:10.5pt;font-family:Consolas;color:maroon;border:none windowtext 1.0pt;padding:0in">'C:..path here...'</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"><br><br><span class="pln"><o:p></o:p></span></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">clr</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">AddReferenceToFile</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">(</span></span><span class="str"><span style="font-size:10.5pt;font-family:Consolas;color:maroon;border:none windowtext 1.0pt;padding:0in">&quot;entity.dll&quot;</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"><br><br><span class="pln"><o:p></o:p></span></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="kwd"><span style="font-size:10.5pt;font-family:Consolas;color:darkblue;border:none windowtext 1.0pt;padding:0in">import</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> </span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">Entity</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">TestPy</span></span><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"><br><br><span class="pln"><o:p></o:p></span></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"><br></span><span class="kwd"><span style="font-size:10.5pt;font-family:Consolas;color:darkblue;border:none windowtext 1.0pt;padding:0in">def</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> </span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">GetTest</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">():</span></span><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"><br><br><span class="pln"><o:p></o:p></span></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">&nbsp; &nbsp; </span></span><span class="kwd"><span style="font-size:10.5pt;font-family:Consolas;color:darkblue;border:none windowtext 1.0pt;padding:0in">return</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> </span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">Entity</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">TestPy</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">();</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> </span></span><span class="com"><span style="font-size:10.5pt;font-family:Consolas;color:gray;border:none windowtext 1.0pt;padding:0in">// the C# class</span></span><span style="font-size:10.5pt;font-family:Consolas"><o:p></o:p></span></pre>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">So now over in C#, I call this and assign it to a dynamic var:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<pre style="margin-bottom:7.5pt;line-height:13.5pt;background:#EEEEEE;vertical-align:baseline;border-style:initial;border-color:initial;background-image:initial;background-attachment:initial;background-origin: initial;background-clip: initial;overflow-x: auto;overflow-y: auto;max-height: 600px;background-position:initial initial;background-repeat:initial initial"><span style="font-size:10.5pt;font-family:Consolas"><o:p>&nbsp;</o:p></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">// C# code calling IronPython and getting back an object</span></span><span style="font-size:10.5pt;font-family:Consolas"><o:p></o:p></span></pre>
<pre style="margin-bottom:7.5pt;line-height:13.5pt;background:#EEEEEE;vertical-align:baseline;border-style:initial;border-color:initial;background-image:initial;background-attachment:initial;background-origin: initial;background-clip: initial;overflow-x: auto;overflow-y: auto;max-height: 600px;background-position:initial initial;background-repeat:initial initial"><span style="font-size:10.5pt;font-family:Consolas"><o:p>&nbsp;</o:p></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">dynamic test </span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">=</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> scriptEngine</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">GetTest</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">();</span></span><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"><br><br><span class="pln"><o:p></o:p></span></span></pre>
<pre style="line-height:13.5pt;background:#EEEEEE;vertical-align:baseline"><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">Entity</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">TestPy</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> t </span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">=</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> test &nbsp;</span></span><span class="kwd"><span style="font-size:10.5pt;font-family:Consolas;color:darkblue;border:none windowtext 1.0pt;padding:0in">as</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> </span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">Entity</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">.</span></span><span class="typ"><span style="font-size:10.5pt;font-family:Consolas;color:#2B91AF;border:none windowtext 1.0pt;padding:0in">TestPy</span></span><span class="pun"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in">;</span></span><span class="pln"><span style="font-size:10.5pt;font-family:Consolas;color:black;border:none windowtext 1.0pt;padding:0in"> </span></span><span class="com"><span style="font-size:10.5pt;font-family:Consolas;color:gray;border:none windowtext 1.0pt;padding:0in">// t==null!!!</span></span><span style="font-size:10.5pt;font-family:Consolas"><o:p></o:p></span></pre>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">the cast fails. However, if I do this with a BCL type (say System.Uri as an example), this cast succeeds. It only fails for types in my own assembly.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">It has been suggested to me that the reason for this type mismatch is that the runtime takes in the totality of the runtime environment when considering if types match. It appears that the IronPython runtime AppDomain gets a different Assembly
 Load Context than the C# (<a href="http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx">http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx</a>) and thus even though the Entity.TestPy type in C# and IP are the same, because the context
 is different, the types do not line up and therefore the cast fails.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">I don't want a dynamic type--I want the static type, but I can't figure out how to get the CLR to be happy about this.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">While I'm strongly suspicious that the Assembly Load Context is what is the problem--I don't know that for sure. I'm guessing an IronPython guru can help sort this out.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">thanks<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Kevin<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</div>
</div>
</body>
</html>