1

同じソース ファイル (モバイルおよびデスクトップ開発用の単一ソース) にアクセスする 2 つのプロジェクトを含む Visual Studio 2008 用のマルチ プロジェクト テンプレートを作成したいと考えています。次のマルチ プロジェクト テンプレート:

<TemplateContent>
    <ProjectCollection>
        <ProjectTemplateLink ProjectName="Client.CF">Client\Template.CF.vstemplate</ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="Client.FF">Client\Template.FF.vstemplate</ProjectTemplateLink>
        <!-- some other projects -->
    </ProjectCollection>
</TemplateContent>

この構造を作成します:

Solution folder
  - Client.CF
    - Client.CF.csproj
    - Other project files
  - Client.FF
    - Client.FF.csproj
    - Other project files

単一ソースの場合、次の構造が必要です。

Solution folder
  - Client
    - Client.CF.csproj
    - Client.FF.csproj
    - Other project files

テンプレート XML をいじってみたところ、そのようなテンプレートを作成できるかどうかは疑問です。誰かがすでにこれを達成していますか?

4

1 に答える 1

0

OPで編集...

これをしないでください - うまくいきません。

字幕:

1週間戻ってもらえますか?

なんで?プロジェクト内の多くのファイルは、相互に関係を持っています。それらへの盲目的なワイルドカード リンクはそれらをビルドに含めますが、関係は失われます。

その基本的な欠陥を無視しても、含めるファイルと除外するファイルの可能性の範囲は...まあ、たくさんあります。プロジェクトを開始する前に、脆弱性や技術的負債をプロジェクトに組み込まないでください。

単一のプロジェクトで複数のビルド構成を使用することは、より優れたソリューションです (しゃれが意図されています)。私が話している種類については、https://stackoverflow.com/a/4457508/492を参照してください。

この間違った答えをここに残しておきますが、これで行き止まりの道をたどる必要がなくなるか、少なくともこの問題に対する認識が高まる可能性があります。ねえ、それは練習だと思ってください。ねえ、少なくとも私は学んでいます。時々。

余談ですが、拡張メソッドなどの一般的に使用されるユーティリティ クラスのようなものをリンクするワイルドカードは良いことです。その影響に注意してください。

.
.

元の話……

同じアプリの 6 (はい - SIX) バージョンをビルドするためにこれを行いました。AutoCAD - 彼らは 3 年ごとに API を壊すのが大好きです。私を始めさせないでください。AutoCAD は 3 つのバージョンのみであるため、他の互換性のあるアプリ用にも構築しています。余談です。

これが私がやった方法です。zSourceCodeソースコードを含む追加のプロジェクトがありました。当たり前。ファイルも持っていAssemblyInfoForAllProjects.csます。AssemblyTitle各プロジェクトには、属性&を持つ追加の AssemblyInfo.cs プロジェクトもありAssemblyDescriptionます。名前と説明でビルド バージョンを識別したかったからです。

プロジェクトファイルにリンクされている他のプロジェクトはzSourceCode...

<Compile Include="..\zSourceCode\**\*.*" Exclude="..\zSourceCode\Properties\AssemblyInfo.cs;..\zSourceCode\bin\**\*.*;..\zSourceCode\obj\**\*.*;..\zSourceCode\**\*.csproj;..\zSourceCode\**\*.user;..\zSourceCode\**\*.vstemplate;..\zSourceCode\readme.txt;..\zSourceCode\**\*.lsp;..\zSourceCode\**\*.scr;..\zSourceCode\**\*.ico;;..\zSourceCode\**\*.txt"> <Link>Src\%(RecursiveDir)%(Filename)%(Extension)</Link> </Compile>

私が readme.txt (*.txt を使用) を 2 倍にしたという事実を無視すると、LISP (*.lsp) も AutoCAD 用のスタートアップ スクリプト (*.scr) もおそらくないでしょう。それが要点です。

このワイルドカード構文を使用すると、ファイルとフォルダーをソース プロジェクトに追加でき、それらがすべてのビルド プロジェクトに反映されます。プロジェクトに固有のコードは、そのプロジェクト自体に追加できます。

バージョン間の動作の変更にパッチを当てる拡張メソッドを追加しました。これらはソリューションの外にある中央の場所にあるため、AutoCAD 関連のものすべてを 1 か所でパッチできます。絶対パスで参照したかったので、これはトリッキーでした。VS にコンパイル リンクの絶対パスを生成させる唯一の方法は、そのファイルを別のドライブに配置する (またはフォルダーを別のドライブ文字にマップする) ことでした。

マルチプロジェクト テンプレートの残りの部分はhttp://msdn.microsoft.com/en-us/library/ms185308.aspxのとおりです。これは、おそらくコードの最初のチャンクを取得した場所です。

ソリューションとプロジェクトの間にフォルダーの驚くべきレイヤーを取得することで、このやや厄介な問題に注意してください: http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/11d7da1d-40cf-4b5c-ac27 -d7fe504062a8/ . Iwizard の実装を作成することで解決できますが、それは GAC と blahblahblah で行う必要があります。それらを手動でシャッフルし.sln、メモ帳++でファイルを編集するだけです。NP++ は、プロジェクト ファイルの編集にも便利です。VS は、プロジェクトを変更しない限り、プロジェクトをリロードするだけです。ソース管理について言及しましたか?

また、ソリューションを初めて生成するときは、ソリューション エクスプローラーでリンクを表示するために、ソリューションを閉じてから再度開く必要があります。

于 2012-11-09T09:36:31.210 に答える