8

v3.9.43 から nuGet 経由で ServiceStack v3.9.70 にアップグレードした後、ServiceStackServiceStack.Interfaces.dllを使用するクラス ライブラリに依存するプロジェクトに がコピーされなくなったことに気付きました。これにより、次のエラーが発生します。

System.IO.FileNotFoundException: Could not load file or assembly 'ServiceStack.Interfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'ServiceStack.Interfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

他のすべての ServiceStack dll がコピーされ、ServiceStack.Interfaces のみが欠落しています。すべての参照は に設定されてCopy Local = Trueおり、このStackOverflow の投稿の提案では問題は解決しません。

バージョンが1.0.0.0ServiceStack.Interfaces.dllの唯一のものであり、他のすべては3.9.70.0に設定されていることに気付きました。これが原因でしょうか?

私のクラスライブラリを参照するすべてのプロジェクトで、カスケードで ServiceStack.Interfaces.dll を手動で参照せずに修正する方法を知っている人はいますか?

更新 - 2014-03-06

v3.9.71.0 にはまだ問題があります。ServiceStack.Interfacesこれは、アセンブリのバージョンが 1.0.0.0 ではなく 1.0.0.0 のままになっているという事実に関連しています。

ServiceStack の github リポジトリのクローンを作成し、build\build.projファイル内のこの行を変更して実行しましたbuild\build.bat

<!-- Exclude versioning future strong-named libs -->
<RegexTransform Include="$(BuildSolutionDir)/src/**/AssemblyInfo.cs"
                Exclude="$(SrcDir)/ServiceStack.Interfaces*/Properties/AssemblyInfo.cs">
   <Find>\d+\.\d+\.\d+\.\d+</Find>
   <ReplaceWith>$(Version)</ReplaceWith>
</RegexTransform>

このために(削除された除外に気づきました)

<RegexTransform Include="$(BuildSolutionDir)/src/**/AssemblyInfo.cs">
   <Find>\d+\.\d+\.\d+\.\d+</Find>
   <ReplaceWith>$(Version)</ReplaceWith>
</RegexTransform>

結果: 正しく動作するようになりました。つまり、ファイルServiceStack.Interfaces.dllは、 を参照するプロジェクトを参照するプロジェクトにコピーされますServiceStack

誰かが私にこれを説明できますか? インターフェイスをバージョン管理から除外する理由は何ですか?

4

1 に答える 1

1

アセンブリ バージョンは、v4 のリリース時に意図的に 3.9.* から 1.0.0.0 に変更されました。

これはおそらく、v4 ServiceStack.Interfaces.dll が厳密な名前とバージョン 4.0 に変更されたためです。'bsd' 3.9.* バージョンは 1.0 にロールバックされました。

詳細は、この SO answerに記載されています。

于 2014-03-10T15:50:43.607 に答える