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を使用
ビルドは成功しました
ビルドに失敗しました
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でたとえばインターフェイスにマップするために使用されます。
最も参考になるコメント
@SvenEVは彼のコミットで解決策を持っていました
これをcsprojファイルに追加します。 PackageReferencesを使用している場合
私はそれをより見やすくするためにここに書いています。私が見た限りでは、emitインターフェイスはAutomapperでたとえばインターフェイスにマップするために使用されます。