2015-01-19 8 views
1

У меня есть мой проект, который может создавать для 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) и ошибка возникает в обратном утверждении 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 или одной из его зависимостей. Система не может найти указанный файл.

ответ

1

Я смог выяснить проблему. Мне пришлось удалить <Private>True/False</Private> из файла <Reference> в файл csproj. Не очень уверен, но я думаю, что это привело к тому, что ранее построенная DLL была загружена во время выполнения.