如何解决mscorlib和Nuget包之间的ApplicationException冲突

时间:2018-05-25 15:22:59

标签: c# xamarin xamarin.forms syncfusion

问题

我正在尝试向我的Xamarin.Forms Android和iOS应用程序的用户显示pdf文件。我正在尝试使用Nuget包Syncfusion.Xamarin.SfPdfViewer

但是,安装软件包并重新编译会导致以下错误:

  

错误CS0433类型' ApplicationException'存在于' Syncfusion.Compression.Portable,Version = 16.1451.0.37,Culture = neutral,PublicKeyToken = null'和' mscorlib,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e'

已尝试的步骤

我已阅读并注意到Nuget包装上的注释:

  

注意:此软件包需要安装在所有Xamarin.Forms项目中(PCL,Android,iOS和UWP)。

我在网上搜索了类似的案例,例如:

功能

我正在使用:

  • Visual Studio 2017版本15.7.2
  • Xamarin版本4.10.0448
  • Xamarin.Forms v3.0.0.482510
  • NETStandard.Library v2.0.3


谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

由于Syncfusion.Compression.Portable,dll(包含在Syncfusion.Xamarin.SfPdfViewer程序包中)和mscorlib.dll都包含相同的完全限定类型System.ApplicationException,因此会发生此问题。这个歧义性问题最近已在我们的项目中修复,该修复程序将包含在我们的下一个版本中,该版本将于2018年7月推出。

解决方法: 但是,我们已经找到了解决方法,可以从我们这里解决此问题。如该链接中所述,我们要求您为Syncfusion.Compression.Portable程序集外部别名,并在您的应用程序中使用所需的类。

解决此问题的步骤: •在csproj文件中添加以下代码段,其中为Syncfusion.Compression.Portable程序集设置了别名“压缩”。

<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
    <ItemGroup>
      <ReferencePath Condition="'%(FileName)' == 'Syncfusion.Compression.Portable'">
        <Aliases>compression</Aliases>
      </ReferencePath>
    </ItemGroup>
  </Target>

•在ApplicationException使用的类中,添加extern别名压缩;在文件顶部,并在类文件中使用所需的ApplicationException。

extern alias compression;
using System;
using Xamarin.Forms;
namespace App1
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
            {
                InitializeComponent();
                try {}          

                // To use the netstandard dll ApplicationException
                catch(global::System.ApplicationException ee1) {}

                // To use the compression dll ApplicationException
                catch (compression::System.ApplicationException ee2)   {}
             }
      }
}

下面我们共享了简单的示例链接,演示了所做的更改以供您参考。

示例链接: http://www.syncfusion.com/downloads/support/directtrac/general/ze/App1243042706.zip

我为Syncfusion工作。

答案 1 :(得分:0)

找到了解决方法。由于good practice是从Exception派生有意义的异常,我创建了一个并使用它来代替我使用ApplicationException的地方。这消除了编译后的模糊性和解决方案。

public class ClaimWriterException : Exception
{
    public ClaimWriterException()
    {
    }

    public ClaimWriterException(string message)
        : base(message)
    {
    }

    public ClaimWriterException(string message, Exception inner)
        : base(message, inner)
    {
    }
}