Я думаю, что я получил проект библиотеки классов C ++ / CLI VS2010 для сборки со ссылками (только) на сборки Silverlight.
Обновление
Хорошо, возможно . Но это не приятно .
Во-первых, вы должны убедить компилятор C ++ НЕ загружать .NET Framework, используя недокументированный переключатель компилятора. Но это не самая плохая часть.
- Установите для вашего проекта C ++ / CLI "Common Language Runtime Support" значение
/clr:safe
- Далее, в разделе Ссылки удалите все ссылки.
- Далее, в свойствах проекта C ++ / CLI, в C ++> Командная строка введите
/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>
К счастью, компилятор оставляет ваши изменения на месте. Так что вы должны быть хорошими, пока никто не очистит ваш временный каталог.
- Строительство теперь должно быть успешным.
Затем вам нужно добавить DLL, созданную проектом C ++ / CLI, в ваше приложение Silverlight. Обратите внимание, что вы не можете установить ссылку на проект, потому что VS2010 все еще не убежден, что C ++ / CLI является проектом Silverlight. Таким образом, вам придется просмотреть и добавить ссылку в виде файла сборки. (И он не будет автоматически переключаться между Debug и Release, чтобы соответствовать приложению Silverlight).
Заключительные замечания
Я получил его для запуска пустого приложения Silverlight в режиме отладки и остановки на точке останова в середине кода C ++ / CLI. Также код C ++ / CLI успешно вернул значение в C #, и локальная переменная в C # получила правильное значение. Так что я думаю, что это работает.
Я сделал еще несколько шагов, пытаясь заставить это работать, но я не думаю, что они повлияли на результат. Если вы столкнетесь с ошибками, дайте мне знать, и я постараюсь выяснить, что я пропустил в этом ответе.