如何为Silverlight编译C++/CLI代码?

ric*_*chj 4 compiler-construction silverlight c++-cli visual-studio-2010 silverlight-4.0

我有一个C++/CLI库,我想在Silverlight应用程序中使用它.应该可以在任何.NET语言中为Silverlight编写代码,但到目前为止我只研究了如何编译C#.Silverlight似乎无法使用为.NET编译的DLL.

我正在使用Visual Studio 2010和Silverlight 4. Silverlight唯一可用的新项目是C#项目.将代码移植到C#不是一个实用的选择.

如何为Silverlight编译C++/CLI代码?

Ben*_*igt 10

我想我可能已经获得了一个VS2010 C++/CLI类库项目来构建(仅)Silverlight程序集.

更新

好的,可能.但这并不.

首先,您必须使用未记录的编译器开关说服C++编译器不加载.NET Framework.但这不是最糟糕的部分.

  • 将C++/CLI项目"公共语言运行时支持"设置为 /clr:safe
  • 接下来,在"引用"下,删除所有引用.
  • 接下来,在C++/CLI项目属性中,在C++> Command Line下,输入 /d1clr:nomscorlib /FU"C:\Program Files (x86)\Microsoft Silverlight\4.0.50917.0\mscorlib.dll"
  • 现在,保存项目并退出Visual Studio.在文本编辑器中打开.vcxproj,然后更改框架版本设置.您希望它与C#Silverlight项目相同:

    <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>

  • 现在,重新打开Visual Studio,并构建项目.您将收到错误,因为编译器自动生成了一个文件,#using<mscorlib>搜索路径首先找到.NET Framework版本.

    Silverlight,Version=v4.0.AssemblyAttributes.cpp(1): fatal error C1197: cannot reference 'c:\windows\microsoft.net\framework\v4.0.30319\mscorlib.dll' as the program has already referenced 'c:\program files (x86)\microsoft silverlight\4.0.50917.0\mscorlib.dll'

  • 双击该错误以打开自动生成的文件.用例如(这里是您放置引用的位置,而不是项目属性中)替换无路径引用

    #using <c:\program files (x86)\microsoft silverlight\4.0.50917.0\mscorlib.dll>

    #using <c:\program files (x86)\microsoft silverlight\4.0.50917.0\System.dll>

    #using <c:\program files (x86)\microsoft silverlight\4.0.50917.0\System.Core.dll>

  • 幸运的是,编译器将您的更改保留在原位.所以只要没有人清理你的临时目录你就应该很好.

  • 建筑现在应该成功.

然后,您需要将C++/CLI项目创建的DLL添加到Silverlight应用程序中.请注意,您无法设置项目引用,因为VS2010仍然不相信C++/CLI是Silverlight项目.因此,您必须浏览并将引用添加为程序集文件.(并且它不会在Debug和Release之间自动切换以匹配Silverlight应用程序).

最后的笔记

我让它在调试模式下运行一个空的Silverlight应用程序,并在C++/CLI代码中间的断点处停止.此外,C++/CLI代码成功将值返回给C#,C#中的局部变量收到了正确的值.所以我猜它有效.

我经历了一些尝试使这项工作更多的步骤,但我认为它们不会影响结果.如果你遇到错误,请告诉我,我会试着弄清楚我在这个答案中省略了什么.