Visual Studio C# の CPU構成を設定するテクニックを説明しようぜ☆(^~^)?

はーーぽーーーんーーーーのーーーんーーーーー☆(^~^) 公開下書き

2020-12-21 mon

20201221shogi71a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Visual Studio をアップグレードしたとき、
設定をいじってみたとき、
ディレクトリを移動して 物理ディレクトリ階層を変更したとき、
いろいろなタイミングで プロジェクトの CPU構成設定 は壊れてしまう☆
今回は その CPU構成設定 の修正方法を伝授してみたいと思う☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 .NET Framework は2年後に廃止なのに まだ使ってる……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 誰も そんなとこで困ってないから、こんな記事 不要なのよ!」

20201221shogi73a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ CPU構成は *.sln (ソリューション)ファイルに保存されてるので、テキストエディターで開けだぜ☆
ただし ここをいじって壊しても わたしは責任を負わないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 免責を覚えたか☆」

20201221shogi72a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ CPU構成別の プロジェクト設定は *.csproj (C#プロジェクト)ファイルに保存されてるので、テキストエディターで開けだぜ☆
ただし ここをいじって壊しても わたしは責任を負わないぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そのフレーズ毎回言うの?」

20201221shogi74a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば 前述のそれらのデータだけを全部削除すると テキストボックスの内容は Debug, x86 だけになるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ボックス1つ減ってるし……☆」

  <PropertyGroup>
    <StartupObject />
  </PropertyGroup>

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 多分、 スタートアップ・プロジェクト にできるのはプロジェクト1つなのに、複数のプロジェクトに 上のXMLコードをコピーしてしまったから
テキストボックスが消えたんだぜ☆」

20201221shogi75.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そして その内容は いろんなチェックボックスが外れていたり、リストボックスで選択されているものが 新規プロジェクト作成した状態のものとは違っているぜ☆
自力で元に戻せだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 余計 めんどくさ……☆」

20201221shogi76.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そんなときは プロジェクトを新規作成し、初期状態の *.sln*.csproj を手に入れろだぜ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 それも含めて めんどくさいっつってんのよ!」

20201221shogi77a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ GUID(長い数字列) が発行されているが、これは自動で発行されるから 無視していい☆」

20201221shogi78a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ プロジェクトの初期設定も分かったな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ ペタペタ するかだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 設定ファイルを直で編集するのは、 Visual Studio を起動していないときにしろだぜ☆」

20201221shogi79a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 欠けているところは 補完されているはずだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 その長ったらしい等式の左辺と右辺が 何なのか 分かんないのよ」

20201223shogi105a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 上図の コントロールと対応しているが、そもそも何なのか意味分からん☆
左辺が設定で、右辺は ただの文字列じゃないか☆?」

    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

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば 欲しかったのを全集合で書くと 上のようになるとするぜ☆」

    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

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ その2倍の記述を プロジェクトごとにしていけだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 何で 倍々ゲームになってんのよ!」

20201221shogi80.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ それがプロジェクトの数だけある☆ 全集合を保とうぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 楽じゃないのは分かった☆ 設定の編集は Visual Studio がやってほしいぜ☆」

20201221shogi81a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 並び順は アルファベット順になってしまうのかも知れないな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 *.csproj の方は何の補完もしれてくれないので ペタペタ していけだぜ☆」

20201221shogi82a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ GUID は *.sln ファイルで使われているのと照らし合わせて 合わせつつ、大文字小文字の違い、波括弧の有無の違い には気を付けろよ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 GUID が書いてないケースもあるぜ☆
憤怒(ふんぬ)☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どこからも参照されていない実行ファイルは GUID 使われてないから分かんないのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そんなんで 情報処理が成り立つわけがないだろ☆
GUID を紐づけるものがあるはずだぜ☆」

20201221shogi83a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ほら、有ったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 光ったボタンを押すゲームで、押したボタンが光る 達人のように ボタンを押し、 知らない建物の中を 一度来たことがある人のように 迷いなく歩いていくぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 崖に落ちるまでは 迷い続けることが できますからね。 諦めるのは 理解の力なのよ」

  <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>

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 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>

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ReleaseLearn に置換して Learn|AnyCPU のコードを作ろうぜ☆ 細かなとこは あとで Visual Studio で設定しようぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 x64 の設定はどうやって作るんだぜ☆?」

20201221shogi84a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 新規プロジェクトに作ってもらおう☆
ソリューション プラットフォーム欄から 構成マネージャー をクリックしろだぜ☆」

20201221shogi85a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 勘で この <新規作成...> をクリック☆」

20201221shogi86.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Any CPU の XMLコードをコピーして x64 のXMLコードを貼り付けてくれることが 期待できるな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 目の前に無い 設定ファイルの動きを 読んでる……☆」

20201221shogi87.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ほら、増えてるぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Any CPU と違うコードが増えてない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そこが分からないから Visual Studio に作ってもらったんだぜ☆」

20201221shogi88.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ わけの分からないエラーが大量に出たんだが☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 恐らく、参照先を GUID 付きでリストにしていて、 GUID が変わったから マッチングが全部 無効になったんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Microsoft サポート外のエラーを 良く知った庭みたいに言うの わらう」

20201221shogi89.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 参照をデータベース化でもしておけば 復元できたのかも知れないが、
そんなことせず改造してたんで 仕方ないぜ、ひとつ ひとつ設定していこうぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 段取り、手際の悪さ プログラマーの基本スキル持ってないの わらう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 プロジェクト名は残ってんだから サーチできそうなものだけど」

20201221shogi90.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 参照を合わせたのに、なんで 名前空間が存在しないと思われてるんだぜ☆?
お父ん、直せよ☆」

20201221shogi91a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ すべてのクラス・ライブラリが ClassLibrary1.dll という名前になって 上書きし合って *.dll が消えてしまったんだと思うぜ☆
記憶を頼りに 1つ1つ 設定を復元していこうぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 落とし穴に自分から入っていて、かっこよさげな振りして出てくるマッチポンプは 止めなさいよ!」

20201221shogi92a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ テキスト・エディターで編集した方が早いの、 GUI は利便性を考え直して欲しい☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 世界は、想定しない動きをする人のための形をしていないのよ!」

20201221shogi93a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ おおかたのエラーを片付けたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 CSC という作った覚えのないファイルは何だぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 C Sharp の Compiler だぜ☆」

20201221shogi94.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 確かに *.dll ファイル が生成されてないぜ、フーム☆」

20201221shogi95a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そりゃ ビルドを スキップしてりゃ *.dll は作られないよな☆」

20201221shogi96a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そうか、 クラス ライブラリコンソール アプリケーションWindows アプリケーション はそれぞれ設定しなくちゃいけなかったんだぜ☆」

20201221shogi97a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ あれっ、 Release モードなのに DEBUG プリプロセッサ―定数が効いてる、あとで見直そう……☆」

20201221shogi98a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こんなところが ずれることが あるのか……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そりゃあるだろ☆ お父んはサポート外なのだから☆」

20201221shogi99.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 参照を追加できませんでした とか珍事だよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 直せよ☆」

20201221shogi100a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ コピーのし忘れで 全集合 になってないのか☆ 直したろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 よし、直ったぜ☆」

<おわり>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事