トップ回答者
xmlコメントについて

質問
-
回答
-
メニューの [表示]、[出力] で確認できる、ビルド時のログに何か手掛かりはないでしょうか?
すべてあてずっぽうですが、
ソリューションにその XML ドキュメントファイルを追加されていて、そのプロパティの「出力ディレクトリにコピー」を "常にコピーする" にされていたりはしないですよね?
アプリケーションのプロパティにある「ビルドイベント」で、どこかからコピーされていないですよね?
Visual Source Safe 等のソース管理も関係ないですよね?(どんなふうに影響するかは想像できていませんが。)
ソリューションファイルやプロジェクトファイル(.sln や.csproj)を直接テキストエディタで開いてみても、おかしなところはないですよね?
.suo ファイル(隠しファイル設定)を削除しても同じでしょうか?(削除前にバックアップしてください。これは一番可能性が低いので、されなくてもいいです。)- 回答としてマーク _kimura 2010年2月8日 3:48
-
プロジェクトのプロパティで指定されている「XML ドキュメント ファイル」のチェックを切って、ビルドした結果
TH01 さんも指摘されていますが、この挙動から、XML ファイルが何らかの形で上書きされていることが推測されます。
対象となるxmlファイルが「2010/01/21」の日付で生成されていました。
また、XML ドキュメント ファイルの名称「a.xml」に変更して(現在はプロジェクト名.xml)ビルドした結果、
a.xmlはビルド時の日付で作成され、プロジェクト名.xmlは「2010/01/21」で作成されました。
もっとも怪しいのは、ビルドイベントですね。
これでどこかからコピーするようなコマンドが設定されていると、XML ドキュメントファイルを生成しても上書きされてしまいます。
# 出力先を消した上でビルドするだけでできるのであれば、ソース管理は多分無罪。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク _kimura 2010年2月8日 3:47
すべての返信
-
説明不足で申し訳ありません。
現時点で該当するクラスをクラスライブラリとしてビルドすると、
dllについては現時点のソースコード元に生成されるのですが、
xmlファイルについては、過去(私の環境では2010/1/21)の
ファイルが生成されて、最新のxmlファイルが生成されません。
上記に示した日付位までは、正常にxmlファイルは生成されていたのですが、
この日付を境に、現状のソースコードでxmlファイルが生成されないようになりました。
また、ビルドの出力先のフォルダを削除してから、
再度リビルドした場合でも、xmlファイルのみ過去のファイルが生成されます。
以上です。何かご存知でしたらお教え頂けますでしょうか。 -
また、ビルドの出力先のフォルダを削除してから、
どこかの過去のファイルが残っているのかな…。
再度リビルドした場合でも、xmlファイルのみ過去のファイルが生成されます。
プロジェクトのプロパティの「XML ドキュメント ファイル」で指定されているパスは、間違っていないのですよね?
また、出力先フォルダを消して、このチェックを切って、ビルドするとファイルはコピーされないのですよね?
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
プロジェクトのプロパティの「XML ドキュメント ファイル」で指定されているパスは、間違っていないのですよね?
また、出力先フォルダを消して、このチェックを切って、ビルドするとファイルはコピーされないのですよね?
プロジェクトのプロパティで指定されている「XML ドキュメント ファイル」のチェックを切って、ビルドした結果
対象となるxmlファイルが「2010/01/21」の日付で生成されていました。
また、XML ドキュメント ファイルの名称「a.xml」に変更して(現在はプロジェクト名.xml)ビルドした結果、
a.xmlはビルド時の日付で作成され、プロジェクト名.xmlは「2010/01/21」で作成されました。
Azuleanさんの回答に有るように、どこかに過去のxmlファイルが残っていて出力されている為、
プロジェクト名.xml が旨く作成されていないように思います。
現時点では、「a.xml」でコメントファイル作成し、その後でファイル名を「プロジェクト名.xml」に変更する方法が
有力に思われるのですが、他に良い対応策をご存知でしたらお教え頂けますでしょうか? -
メニューの [表示]、[出力] で確認できる、ビルド時のログに何か手掛かりはないでしょうか?
すべてあてずっぽうですが、
ソリューションにその XML ドキュメントファイルを追加されていて、そのプロパティの「出力ディレクトリにコピー」を "常にコピーする" にされていたりはしないですよね?
アプリケーションのプロパティにある「ビルドイベント」で、どこかからコピーされていないですよね?
Visual Source Safe 等のソース管理も関係ないですよね?(どんなふうに影響するかは想像できていませんが。)
ソリューションファイルやプロジェクトファイル(.sln や.csproj)を直接テキストエディタで開いてみても、おかしなところはないですよね?
.suo ファイル(隠しファイル設定)を削除しても同じでしょうか?(削除前にバックアップしてください。これは一番可能性が低いので、されなくてもいいです。)- 回答としてマーク _kimura 2010年2月8日 3:48
-
プロジェクトのプロパティで指定されている「XML ドキュメント ファイル」のチェックを切って、ビルドした結果
TH01 さんも指摘されていますが、この挙動から、XML ファイルが何らかの形で上書きされていることが推測されます。
対象となるxmlファイルが「2010/01/21」の日付で生成されていました。
また、XML ドキュメント ファイルの名称「a.xml」に変更して(現在はプロジェクト名.xml)ビルドした結果、
a.xmlはビルド時の日付で作成され、プロジェクト名.xmlは「2010/01/21」で作成されました。
もっとも怪しいのは、ビルドイベントですね。
これでどこかからコピーするようなコマンドが設定されていると、XML ドキュメントファイルを生成しても上書きされてしまいます。
# 出力先を消した上でビルドするだけでできるのであれば、ソース管理は多分無罪。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク _kimura 2010年2月8日 3:47
-
回答を頂き有難う御座いました。
皆さんの回答を基に、再度検証した結果、xmlファイルが過去のファイルとして
出力された原因が、判明しました。
xmlファイルが過去のファイルが出力されていた、原因と致しましては、
dllが循環参照されていたことにありました。
まず、基本となる「クラスライブラリA」(A.dll) を作成します。
次に、「A.dll」を参照して「クラスライブラリB」(B.dll)を作成します。
最後に、「クラスライブラリA」に「B.dll」の参照を追加します。
ビルド時のログを確認するとクラスライブラリAをビルドした際に、
1.クラスライブラリAのxmlコメントを作成
2.クラスライブラリAのdllを出力
の順に処理されているらしく、
1、2の間で、クラスライブラリBで参照しているdllとxmlコメントファイルを
出力ディレクトリにコピーをしているようです。
その為、クラスライブラリAのxmlが上書きされてしまい、
xmlファイルが過去のファイルが出力されていたようです。
私としましては、dllの構成を再度検証する時間も有りませんので、
プロジェクト名.xmlと異なる名称のxmlコメントファイルを作成して、
ファイル名を変更して対応したいと思います。 -
_kimura さん自身にも回答マークを付けられてはいかがですか?
(ひらぽんさんの返信も)
他の人のためになる話だと思いました。
時間がないので仕方がないですが、やはり理想としては循環参照にすべきではないと思います。
どちらかは古い DLL に依存してビルドが行われますし、A か B のどちらが上書きされるかについても、メニューの [プロジェクト]、[プロジェクトの依存関係] の画面の [ビルドの順序] 次第かと思いますが、循環参照の場合はどちらにもなりえると思います。
それと、現状はプロジェクトの参照ではなく直接 DLL を参照されていると思いますが、その DLL の参照のプロパティにある「ローカルコピー」はデフォルトの True ではなく、False にされた方が良さそうに思います。
True の場合、今試してみると XML だけでなく DLL 自体も片方は古いままになりましたし、False の場合には XML ドキュメントはそれぞれの出力パスにのみ、作成されました。
循環参照があると、True の場合のローカルコピーを更新してくれる部分が期待されてるようには機能しないのだろうと思いますが、これは仕方がないように思います。(ローカルコピーの更新に関係ない A の xml が上書きされるのは不可解ですけど) -
アセンブリ間の相互参照は避けるべきです。(「してはならない」と言い切るには説明不足だと思いましたので、弱い表現を選んでいます)
実際、同じソリューションに加えて、プロジェクト参照をしようとすると、下記のようなエラーメッセージが表示されます。
'ClassLibrary1' への参照を追加できませんでした。 このプロジェクトを参照として追加すると循環する依存関係を生じます。
アセンブリ間の相互参照は基本的に想定されていないものだとお考えください。
大抵の場合、両方のアセンブリで共通で使うクラスなどの型をもう1つ別のアセンブリとして抽出し、そのアセンブリを参照するようにすれば解決できるはずです。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。