我正在尝试向我的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)。
我在网上搜索了类似的案例,例如:
我正在使用:
谢谢你的帮助。
答案 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)
{
}
}