2017-11-21 27 views
2

私のサービス用のxmlserializer dllを生成しています。それは大きなwebserviceです - ビルドは約2分かかります。xmlserializer.dllは、ターゲットアセンブリが変更された場合には使用されません。

ビルド時間を短縮するために、xmlserializerのビルドを別のMakefileプロジェクトに分けました。インターフェイスが変更されていないことを考えれば、私は一度コンパイルできると思っていました。

しかし、サービスを再コンパイルすると、xmlserializerは使用されなくなり、実行時にシリアライザコードが生成されます。

誰でもこれを見ましたか?回避策はありますか? xmlserializerがサービスアセンブリに一致しなくなる原因は何ですか?

ありがとうございました。

更新:

[OK]を、私は半分の答えを見つけた...

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializerversionattribute(v=vs.110).aspx

は(生成された.csファイルのコードである)XmlSerializerVersionAttributeを記述します。

文書は言う...

インフラが一致する名前を持つアセンブリを見つけた場合、アセンブリがロードされ、見つかったアセンブリのバージョンと現在のバージョンの間の一致のためのインフラストラクチャをチェックしXmlSerializerVersionAttribute親アセンブリ。バージョンが一致しない場合、見つかったアセンブリは使用されません。代わりに、一時的なアセンブリがシリアル化のために生成されます。 .NET Frameworkのソースコードで探し

I手動のXmlSerializerアセンブリをロードし、上ParentAssemblyIdフィールドを変更した場合ParentAssemblyId、すなわち

Assembly.GetExecutingAssembly().GetModules()[0].ModuleVersionId 

しかし、実際にはモジュールのバージョン番号であることを示しています属性、それはまだ動作しません - 私はフレームワークがシリアライザアセンブリの独自のコピーを読み込むと思います。

答えて

0

私は、ビルド後のステップを追加して、アセンブリのモジュールIDを変更しました(デバッグビルドで)。

私はfody.MVIDを試しましたが(ここではcan-i-specify-the-module-version-id-mvid-when-building-a-net-assemblyと記載されています)、動作させることができませんでした(バージョンミスマッチ)。

最後に私はこのブログ記事のコードを使用しました。https://blogs.msdn.microsoft.com/johnls/2005/08/13/changing-mvids/

関連する問題