У меня есть мой проект, который может создавать для x64, x86 и ARM (WinRT) ссылки на платформу конкретной библиотеки (также строит на x64, x86 и ARM). Чтобы условно построить DLL для конкретной платформы, я вручную отредактировал файл.csproj, чтобы иметь элементы для этих DLL для конкретной платформы, как показано ниже:
<ItemGroup Condition="'$(Platform)' == 'x86'">
<Reference Include="PortablePlatform">
<HintPath>..\..\packages\LibraryName\x86\PortablePlatform.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x64'">
<Reference Include="PortablePlatform">
<HintPath>..\..\packages\LibraryName\x64\PortablePlatform.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'ARM'">
<Reference Include="PortablePlatform">
<HintPath>..\..\packages\LibraryName\ARM\PortablePlatform.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
Теперь я могу скомпилировать свое решение. Но во время выполнения он дает ошибку при загрузке специфичных для платформы DLL (PortablePlatform.dll), а ошибка выводится в оператор return GetXamlType в xamlTypeInfo.g.cs:
public global::Windows.UI.Xaml.Markup.IXamlType GetXamlType(global::System.Type type)
{
if(_provider == null)
{
_provider = new global::<ABC>_App_XamlTypeInfo.XamlTypeInfoProvider();
}
return _provider.GetXamlTypeByType(type);
}
Ниже приведен стек ошибок: исключение типа "System.IO.FileNotFoundException" произошло в.WinRT.App.exe, но не было обработано в коде пользователя. Дополнительная информация: Не удалось загрузить файл или сборку "PortablePlatform, Version = 0.1.0.0, Culture = neutral, PublicKeyToken = null или одна из его зависимостей. Система не может найти указанный файл.
Мне удалось выяснить этот вопрос. Мне пришлось удалить <Private>True/False</Private>
из элемента <Reference>
в файле csproj. Не очень уверен, но я думаю, что это привело к тому, что ранее построенная DLL была загружена во время выполнения.