「 Visual Studio をアップグレードしたとき、
設定をいじってみたとき、
ディレクトリを移動して 物理ディレクトリ階層を変更したとき、
いろいろなタイミングで プロジェクトの CPU構成設定 は壊れてしまう☆
今回は その CPU構成設定 の修正方法を伝授してみたいと思う☆」
「 .NET Framework は2年後に廃止なのに まだ使ってる……☆」
「 誰も そんなとこで困ってないから、こんな記事 不要なのよ!」
「 ↑ CPU構成は *.sln
(ソリューション)ファイルに保存されてるので、テキストエディターで開けだぜ☆
ただし ここをいじって壊しても わたしは責任を負わないぜ☆」
「 ↑ CPU構成別の プロジェクト設定は *.csproj
(C#プロジェクト)ファイルに保存されてるので、テキストエディターで開けだぜ☆
ただし ここをいじって壊しても わたしは責任を負わないぜ☆」
「 ↑ 例えば 前述のそれらのデータだけを全部削除すると テキストボックスの内容は Debug, x86
だけになるぜ☆」
<PropertyGroup>
<StartupObject />
</PropertyGroup>
「 ↑ 多分、 スタートアップ・プロジェクト にできるのはプロジェクト1つなのに、複数のプロジェクトに 上のXMLコードをコピーしてしまったから
テキストボックスが消えたんだぜ☆」
「 ↑ そして その内容は いろんなチェックボックスが外れていたり、リストボックスで選択されているものが 新規プロジェクト作成した状態のものとは違っているぜ☆
自力で元に戻せだぜ☆」
「 ↑ そんなときは プロジェクトを新規作成し、初期状態の *.sln
と *.csproj
を手に入れろだぜ☆!」
「 ↑ GUID(長い数字列) が発行されているが、これは自動で発行されるから 無視していい☆」
「 設定ファイルを直で編集するのは、 Visual Studio を起動していないときにしろだぜ☆」
「 その長ったらしい等式の左辺と右辺が 何なのか 分かんないのよ」
「 ↑ 上図の コントロールと対応しているが、そもそも何なのか意味分からん☆
左辺が設定で、右辺は ただの文字列じゃないか☆?」
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
Learn|Any CPU = Learn|Any CPU
Debug|x64 = Debug|x64
Release|x64 = Release|x64
Learn|x64 = Learn|x64
EndGlobalSection
「 ↑ 例えば 欲しかったのを全集合で書くと 上のようになるとするぜ☆」
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Release|Any CPU.Build.0 = Release|Any CPU
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Learn|Any CPU.ActiveCfg = Learn|Any CPU
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Learn|Any CPU.Build.0 = Learn|Any CPU
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Debug|x64.ActiveCfg = Debug|x64
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Debug|x64.Build.0 = Debug|x64
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Release|x64.ActiveCfg = Release|x64
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Release|x64.Build.0 = Release|x64
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Learn|x64.ActiveCfg = Learn|x64
{147B11E0-827B-4D3F-844C-ADF2BEAFA53F}.Learn|x64.Build.0 = Learn|x64
「 ↑ じゃあ その2倍の記述を プロジェクトごとにしていけだぜ☆」
「 ↑ それがプロジェクトの数だけある☆ 全集合を保とうぜ☆?」
「 楽じゃないのは分かった☆ 設定の編集は Visual Studio がやってほしいぜ☆」
「 ↑ 並び順は アルファベット順になってしまうのかも知れないな☆」
「 *.csproj
の方は何の補完もしれてくれないので ペタペタ していけだぜ☆」
「 ↑ GUID は *.sln
ファイルで使われているのと照らし合わせて 合わせつつ、大文字小文字の違い、波括弧の有無の違い には気を付けろよ☆」
「 GUID が書いてないケースもあるぜ☆
憤怒(ふんぬ)☆」
「 どこからも参照されていない実行ファイルは GUID 使われてないから分かんないのよ」
「 そんなんで 情報処理が成り立つわけがないだろ☆
GUID を紐づけるものがあるはずだぜ☆」
「 光ったボタンを押すゲームで、押したボタンが光る 達人のように ボタンを押し、 知らない建物の中を 一度来たことがある人のように 迷いなく歩いていくぜ☆」
「 崖に落ちるまでは 迷い続けることが できますからね。 諦めるのは 理解の力なのよ」
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
「 ↑ Release|AnyCPU
のコードをコピーして……☆、」
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Learn|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Learn\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
「 ↑ Release
を Learn
に置換して Learn|AnyCPU
のコードを作ろうぜ☆ 細かなとこは あとで Visual Studio で設定しようぜ☆」
「 ↑ 新規プロジェクトに作ってもらおう☆
ソリューション プラットフォーム欄から 構成マネージャー をクリックしろだぜ☆」
「 ↑ Any CPU
の XMLコードをコピーして x64
のXMLコードを貼り付けてくれることが 期待できるな☆」
「 そこが分からないから Visual Studio に作ってもらったんだぜ☆」
「 恐らく、参照先を GUID 付きでリストにしていて、 GUID が変わったから マッチングが全部 無効になったんだぜ☆」
「 Microsoft サポート外のエラーを 良く知った庭みたいに言うの わらう」
「 参照をデータベース化でもしておけば 復元できたのかも知れないが、
そんなことせず改造してたんで 仕方ないぜ、ひとつ ひとつ設定していこうぜ☆?」
「 段取り、手際の悪さ プログラマーの基本スキル持ってないの わらう☆」
「 プロジェクト名は残ってんだから サーチできそうなものだけど」
「 ↑ 参照を合わせたのに、なんで 名前空間が存在しないと思われてるんだぜ☆?
お父ん、直せよ☆」
「 ↑ すべてのクラス・ライブラリが ClassLibrary1.dll
という名前になって 上書きし合って *.dll
が消えてしまったんだと思うぜ☆
記憶を頼りに 1つ1つ 設定を復元していこうぜ☆」
「 落とし穴に自分から入っていて、かっこよさげな振りして出てくるマッチポンプは 止めなさいよ!」
「 ↑ テキスト・エディターで編集した方が早いの、 GUI は利便性を考え直して欲しい☆!」
「 世界は、想定しない動きをする人のための形をしていないのよ!」
「 ↑ 確かに *.dll
ファイル が生成されてないぜ、フーム☆」
「 ↑ そりゃ ビルドを スキップしてりゃ *.dll
は作られないよな☆」
「 ↑ そうか、 クラス ライブラリ
、 コンソール アプリケーション
、 Windows アプリケーション
はそれぞれ設定しなくちゃいけなかったんだぜ☆」
「 ↑ あれっ、 Release
モードなのに DEBUG
プリプロセッサ―定数が効いてる、あとで見直そう……☆」
「 ↑ コピーのし忘れで 全集合 になってないのか☆ 直したろ☆」
<おわり>
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!