根据平台类型构建项目

时间:2015-01-19 08:54:26

标签: c# .net windows-runtime csproj

我的项目可以构建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)时会出错,并且在xamlTypeInfo.g.cs中的GetXamlType的return语句中抛出错误:

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);
        }

下面是错误堆栈: 类型&#39; System.IO.FileNotFoundException&#39;的例外情况发生在.WinRT.App.exe但未在用户代码中处理 附加信息:无法加载文件或程序集&#39; PortablePlatform,Version = 0.1.0.0,Culture = neutral,PublicKeyToken = null&#39;或其中一个依赖项。系统找不到指定的文件。

1 个答案:

答案 0 :(得分:1)

我能够找出问题所在。我必须从csproj文件中的<Private>True/False</Private>元素中删除<Reference>。不太确定,但我认为它导致之前构建的dll在运行时加载。