- PR -

VS2005 でリファクタリング機能が使えない

1
投稿者投稿内容
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2006-08-17 05:55
いつもお世話になっております。

VS2005でC#で開発していますが、便利なrefactoring機能がいつの間にか使えなくなってしまって困っています。変数を右クリックして Refactoring -> Rename で、その変数の名前の変更を一気にやってしまうものです。
普通にビルドも実行も出来るのですが、リファクタリングをしようとすると「ビルドエラーのためにリファクタリングが出来ません」といった意味のエラーが出てしまいます。リファクタリングのアウトプットを見ると
error CS1509: Referenced file 'c:\(途中略)\obj\Debug\Refactor\Common.dll' is not an assembly; use '/addmodule' option instead
というエラーが起こっています。該当箇所を見ると、アセンブリマニフェストが無いdllが出来ています。普通にビルドして出来た Debug フォルダの直下のdllはサイズが少し大きく、アセンブリマニフェストがちゃんとあります。

どなたか、原因をご存じないでしょうか?
検索して見たところ、以下のページを見つけましたが、解決法は AssemblyInfo.cs の中で key file のパスを変える、とあります。
http://www.codecomments.com/archive307-2006-4-890529.html
しかし、私のケースではパスが間違っているようには見えません(パスを変えると普通のビルドでエラーが出る)。

今の AssemblyInfo.cs の中身はこんな感じです。
コード:
using System.Reflection;

[assembly: AssemblyDescription("Common")]
[assembly: AssemblyDelaySign(false)]
#pragma warning disable 1699
[assembly: AssemblyKeyFile(@"..\..\..\StrongName\aaa.snk")]
#pragma warning restore 1699
[assembly: AssemblyTitleAttribute("Common.dll")]

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-17 07:33
別のプロジェクトでは問題ないでしょうか?
とりあえず、問題の切り分けをしましょう。
(Visual Studio 自体がおかしい || そのプロジェクトだけがおかしい)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2006-08-17 08:53
じゃんぬさん、どうも有り難うございます。

1つ進展がありました。AssemblyInfo.csの
コード:
[assembly: AssemblyKeyFile(@"..\..\..\StrongName\aaa.snk")]


を絶対パスにすると、全て動作しました。
コード:
[assembly: AssemblyKeyFile(@"c:\(途中略)\StrongName\aaa.snk")]



というわけで「普通のビルドでは相対パスできちんと.snkファイルを指定できているのに
リファクタリングの時にはファイルを見つけられずに失敗しているらしい」ということが分かりました。

しかし、何故そんなことが起こるのかがわかりません。また、絶対パス指定のコードのままでいいはずもありません。

この現象は、特定のプロジェクト(と他のいくつかのプロジェクト)で起こっています。全く同じ AssemblyInfo.cs で問題なく動作しているプロジェクトもあります。それらのプロジェクト同士のプリファレンスの違いを探して見たのですが、見つかっていません。

どうぞよろしくお願いします。
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2006-08-19 06:08
自己解決しました。結局、
[assembly: AssemblyKeyFile(@"..\..\..\StrongName\aaa.snk")]
のパスが.csprojファイルからの相対パスだったのですが、この行を変更して
[assembly: AssemblyKeyFile(@"..\..\..\..\..\StrongName\aaa.snk")]
と、DLLからの相対パスに変更したところ、問題なく動作するようになりました。

つまり、
- 普通のビルドの時は.snkへの相対パスは.csprojからでも、.dllからでもどちらでもよい
- Refactorのビルドの時は、.dllからの相対パスである必要がある(そうでなければエラー)
というワケ分からない状態のようです。

とりあえず、ご報告でした。
1

スキルアップ/キャリアアップ(JOB@IT)