Xamarin.forms: [フォーム] [iOS]エラーCS1703同等のIDを持つ複数のアセンブリNetstandard 2.0 Automapper

作成日 2017年12月12日  ·  10コメント  ·  ソース: xamarin/Xamarin.Forms

説明

Automapperからのクロスポストhttps://github.com/AutoMapper/AutoMapper/issues/2455

AutoMapper> = 6.2.0を追加すると、フォームiOSプロジェクトのビルドに失敗し、CS1703エラーが出力されます。

正確なエラーは

Error CS1703

Multiple assemblies with equivalent identity have been imported: 
'C:\Users\plebm\.nuget\packages\system.reflection.emit\4.3.0\ref\netstandard1.1\System.Reflection.Emit.dll' 
and 
'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\Xamarin.iOS\v1.0\Facades\System.Reflection.Emit.dll'.
Remove one of the duplicate references.

これは、AutoMapperが6.2.0でSystem.Runtime.Serialization.Primitives.4.3.0の依存関係を追加したことが原因のようです。

再現する手順

VS15.5.1を使用

  1. Xamarin Cross-Platアプリの作成(Xam.Forms)
  2. 作成オプションからiOSと.net標準を選択します
  3. Automapper(6.2.2)を.net標準プロジェクトに追加します
  4. iOSプロジェクトをビルドする

予想される行動

ビルドは成功しました

実際の動作

ビルドに失敗しました

invalid

最も参考になるコメント

@SvenEVは彼のコミットで解決策を持っていました
これをcsprojファイルに追加します。 PackageReferencesを使用している場合

<PackageReference Include="System.Reflection.Emit" Version="4.3.0">
    <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

私はそれをより見やすくするためにここに書いています。私が見た限りでは、emitインターフェイスはAutomapperでたとえばインターフェイスにマップするために使用されます。

全てのコメント10件

automapperがReflection.Emitを必要とするものを使用しているようです。 これはiOSでは機能しません。

@jassmithコメントありがとうございます。 ただし、1つの質問ですが、Reflection.Emitはランタイムエラーまたはビルドエラーを引き起こしますか?

AutoMapperは式ツリーのコンパイルを使用するため、最終的にはExpression.Lambda(...)。Compile()になります。 いくつかの非常にターゲットを絞ったシナリオには、Reflection.Emitを使用します。

基本的に、iOSをターゲットにするには、Reflection.Emitをまったく使用/参照しないターゲットがあることを確認する必要があります。

コンパイルエラーは、15.5とバインディングリダイレクトに関する最近の問題のように聞こえますが。

私も同じ問題を抱えていました。 私の解決策は、次のようにiOSプロジェクトでproject.jsonを使用することでした。

{
  "dependencies": {
    "System.Reflection.Emit": {
      "version": "4.3.0",
      "exclude": "all"
    }
  },
  "frameworks": {
    "Xamarin.iOS,Version=v1.0": {}
  },
  "runtimes": {
    "win": {}
  }
}

@gmwilhelm私はproject.jsonがまだ物であるとは知りませんでした。 今日私は学ぶ

@jassmithこのチケットをもう一度確認する可能性はありますか? あなたがそれを無効とマークしたことは知っていますが、これは実際にはXam.Formsが対処すべきものだと思います

空白のNuGetパッケージを使用して、これをローカルで再現しようとしています。
Reflection.Emitを参照しますが、使用しません。 コンパイルエラーが発生しました
一度だけですが、その後、不思議なことに消えました。

2018年1月2日火曜日午後5時54分[email protected]は次のように書いています。

@jassmithhttps ://github.com/jassmithこれをレビューする機会があれば
もう一度チケット? あなたがそれを無効とマークしたことは知っていますが、これは実際には
Xam.Formsが対処する必要があるもの


コメントしたのでこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/xamarin/Xamarin.Forms/issues/1380#issuecomment-354906852
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAGYMoqgqceTH4BPe4vqZwLkAoYb1YO0ks5tGsGxgaJpZM4Q-gOM

@pleb @jbogard

Visual Studio 15.5.5では複数のアセンブリエラーを再現できますが、VSMacでは再現できません。 これを追跡するためにDevComアイテムを作成しました。

参考:上記の回避策を実行するには、VSを再起動する必要がある場合があります。 それは私にとってVSforMacで起こりました。

@SvenEVは彼のコミットで解決策を持っていました
これをcsprojファイルに追加します。 PackageReferencesを使用している場合

<PackageReference Include="System.Reflection.Emit" Version="4.3.0">
    <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

私はそれをより見やすくするためにここに書いています。私が見た限りでは、emitインターフェイスはAutomapperでたとえばインターフェイスにマップするために使用されます。

このページは役に立ちましたか?
0 / 5 - 0 評価