Last Updated: December 26, 2018
· adamhewitt627

Multiple output types from Visual Studio

I've recently come across a need to use reflection on a Windows Runtime component that is written in C#. The challenges:
1. Since it is being consumed by a JavaScript/HTML Windows 8 app, it must be a WinRT component, thus no DLL.
2. The resulting .winmd file is not compatible with the C# reflection API, specifically the "Load" methods.
3. I am using the reflection API from a standard C# console application, which can thus not reference the output as a reference and do something like: typeof(MyClass).Assembly

What I really need is a DLL that compiles against the Windows Store API, and automatically matches the configuration of my main development library.

The solution: a second .csproj file in the same directory (so all relative paths match) with the following contents:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="">
  <Import Project="WinRTComponent.csproj" />

Within WinRTComponent.csproj find the OutputType line and add a condition like:
<OutputType Condition=" '$(OutputType)' == '' ">winmdobj</OutputType>

I would expect a similar method to be useful for other combinations of output types as well.