【问题标题】:How to resolve ApplicationException conflict between mscorlib and Nuget package如何解决 mscorlib 和 Nuget 包之间的 ApplicationException 冲突
【发布时间】:2018-05-25 15:22:58
【问题描述】:

问题

我正在尝试向我的 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


感谢您的帮助。

【问题讨论】:

  • 出现这种情况,往往是由于 using 指令过多导致的意外。导航到产生此错误的代码行并修复它,拼出类型的全名。像 System.ApplicationException。请注意,通过显示产生编译错误的代码,您将始终在 SO 中获得最有用的帮助。
  • 试过“使用 AppException = System.ApplicationException”。但是,仍然无法使用上述相同的消息进行编译。

标签: c# xamarin xamarin.forms syncfusion


【解决方案1】:

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

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

解决此问题的步骤: • 在为 Syncfusion.Compression.Portable 程序集设置别名“compression”的 csproj 文件中添加以下代码 sn-p。

<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 工作。

【讨论】:

    【解决方案2】:

    找到了解决方法。由于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)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多