Recentemente, descobri a necessidade de usar a reflexão em um componente do Tempo de Execução do Windows que é escrito em C #. Os desafios:
1. Como está sendo consumido por um aplicativo JavaScript / HTML do Windows 8, deve ser um componente WinRT, portanto, nenhuma DLL.
2. O arquivo .winmd resultante não é compatível com a API de reflexão C #, especificamente com os métodos “Carregar”.
3. Estou usando a API de reflexão de um aplicativo de console C # padrão, que pode, portanto, não fazer referência à saída como referência e fazer algo como: typeof (MyClass) .Assembly
O que eu realmente preciso é de uma DLL que compile com a API da Windows Store e corresponda automaticamente à configuração da minha biblioteca de desenvolvimento principal.
A solução: um segundo arquivo .csproj no mesmo diretório (para que todos os caminhos relativos correspondam) com o seguinte conteúdo:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" >="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputType>Library</OutputType>
<ProjectGuid>{12345678-6543-7890-2345-5678901234567}</ProjectGuid>
</PropertyGroup>
<Import Project="WinRTComponent.csproj" />
</Project>
Em WinRTComponent.csproj, encontre a linha OutputType e adicione uma condição como:
<OutputType Condition = “‘$ (OutputType)’ == ””> winmdobj </OutputType>
Eu esperaria que um método semelhante fosse útil para outras combinações de tipos de saída também.