

C#のソースコード(.cs)をVisualStudioのソリューションフォルダの外に置きたいです。  
ソリューションの一部のプロジェクトコードを本体とは別にSubversionで管理したいためです。  
C#プロジェクトを、ソリューション外に置く方法か、それが無理なら、ソースファイルのみを  
ソリューションフォルダ外に置きたいですが、方法はありますでしょうか？

### 課題

既存のSolution-Aがあります。  
Solution-Aにはプロジェクトが10個含まれ、  
8個のC#プロジェクト  
2個のC++プロジェクトで構成されます。

10個のプロジェクト生成物は統一して1つのバージョンとしてリリースするもので  
統一のバージョン番号を付けており、Subversionでバージョン管理しています。

Solution-Aのフォルダ名が、Solution-Aとして以下のようなフォルダ構成になっています。  
ここまでを本体と呼びます。

[code]

    Solution-A  
    └.svn  
    └.vs  
    └Project-1  
    └Project-2  
    └Project-3  
    
[/code]

ここで、新しいプロジェクトProject-11を追加したいです。  
Project-11 はC#で作るプラグインDLLです。

Project-11のコードは Project-1のコードを参照するので、プロジェクト参照を使います。  
Project-11の生成物は、Solution-Aとは別のバージョン番号を付けます。  
そのためバージョン管理も別リポジトリで行いたいです。

フォルダ構成を以下のようにしてしまうと、Subversionでのバージョン管理に支障がでると考えました。

[code]

    Solution-A
    └Project-11
    
[/code]

そのため、Project-11フォルダを、Solution-Aフォルダの外部に置きたいと考えました。

### 試したこと

(案1) プロジェクトフォルダを外部に置く  
追加→既存のプロジェクト  
Solution-Aの外側の.csproj指定すると、フォルダごと  
Solution-Aの下にコピーされてしまう。

(案2) csソースファイルだけ外部に置いてバージョン管理  
Solution-A  
└Project-11  
をつくった上で、  
追加→既存の項目→リンクとして追加 (csソースを選択)  
ソースファイルが、Slution-Aフォルダにコピーされてしまう。

(案3) Subversionでのソース管理を工夫する  
まだ試していません。  
近日、gitに移行する計画もあり、他の方法を優先しました。


CC BY-SA 4.0
2022-07-29T10:06:29.253
90273
2023-10-02T14:03:15.370
2022-08-01T06:05:00.423
3060
53760
question
c# visual-studio
C#のソースコードのフォルダをソリューション外に置きたい


現在書かれている程度の内容であれば、いずれもIDE上の右クリック等で「追加」→「既存のプロジェクト」や「追加」→「既存の項目」→「ファイルダイアログの追加ボタンのドロップダウン」→「リンクとして追加」といった手順で指定することが出来ます。  
ソリューションファイルやプロジェクトファイルの該当項目のパスは相対パスで設定されますが、それらのファイルを直接編集して絶対パスに変えてもIDEで開くときには問題無かったので、ビルド等は出来るでしょう。

ただし使われ方の詳細によっては本当にそれらをソースファイルとして必要か疑問があります。

プロジェクトコードとは別にしたいのであれば、それらを別のアセンブリとして独立したプロジェクトとしてビルドし、他の人は出来上がったアセンブリを参照として取り込むという方法で使うことが出来ると思われます。

[XY問題](https://ja.meta.stackoverflow.com/q/2701/26370)かもしれませんので、もう少し何のためにどういう使い方をしたいから、こうしたフォルダ/ファイル構成にしたい。といった情報を追加した方が良いと思われます。

* * *

**更新内容に応じて**

  * Project11 を Solution-A の配下に作成するのは何故でしょう。  
それだと既存の Solution-A というsvn管理単位の下に単に サブProject が追加されただけでは？  
新規に Solution-B を起こしてその下に Project11 を作成するのが良いと思われます。

  * プロジェクト/ファイルいずれの追加でもプロジェクトやファイル自身がコピーされる。  
こちら(Visual Studio Community 2022)ではその状況は発生していません。  
(上記 Solution-B を起こす方式)  
あるいは何かVisual Studioの版数が違うか、デフォルトの設定か何かを変える必要があるかもしれません。  
私の方は何かを変えたかどうか記憶に無いので、Visual Studio関連のヘルプ等を検索してみてください。

    * 一応その状態になっても、プロジェクトならソリューション(.sln)ファイル/ファイルならプロジェクト(.csproj)ファイルの中に対象のパスを記述しているところがあるので、それを直接編集して元々のプロジェクト/ファイルを指し示すように変更して、コピーされたプロジェクト/ファイルを消せば元々のものを共有出来るようになります。
  * 「追加」→「既存のプロジェクト」の方法は取り下げます。  
それは希望する使い方にはなって無さそうなので。

  * ソースファイルの共有をやめてビルド結果のアセンブリを参照する  
ソースファイルのまま共有していると、うっかり編集したり逆に元々のプロジェクトの改版途中のものを使ったりする可能性があるので、ビルド結果のアセンブリを使う方法に変える。  
IDE右上の「ソリューションエクスプローラー」ペインで「Project11」の「参照」→「参照の追加」→「参照」→「参照ボタン」で「Project1」のビルド結果の
dll を探して指定する。  
「Project11」のソース上では「Project1」の namespace を using する。

* * *

こちらの記事を参考に、アセンブリのEXE/DLLを参照として組み込み、そこに対応するPDBファイルがあればだいたい希望する機能が実現出来るとのこと。  
["Go To Definition" in Visual Studio only brings up the Metadata for Non-
Project references](https://stackoverflow.com/q/13203346/9014308)  
ただし、ソースコードからの「定義へ移動(F12)」が出来ないとのこと。

その後検索を続けて見つけたこの記事によるとVisual Studio 2022の17.1以後は改良されている可能性があります。  
[Go To Definition improvements for external source in
Roslyn](https://devblogs.microsoft.com/dotnet/go-to-definition-improvements-
for-external-source-in-roslyn/)  
この記事の最後にまだ改良のアイデアがあって作業を続けていくつもりと書いてあります。

機会があれば試してみてください。  
この時点で実現されていなくても要望を出しておけば対応されるかもしれません。


CC BY-SA 4.0
2022-07-29T11:09:28.173
90274
2022-08-02T13:08:26.923
2022-08-02T13:08:26.923
26370
26370
90273
answer