4

いくつかのプロジェクトを含むソリューションがあります。1 つを除くすべてがクラス ライブラリ プロジェクトであり、いくつかのソリューションで使用され、git サブモジュールとして含まれており、.sln ファイルはなく、.csproj および .cs ソースのみです。

このようなもの(1行、1つのリポジトリ)

TheProgram: .sln, exe.csproj, .nuget/NuGet.{config,targets}, packages.config, .cs files
  submodule-0: sub-n.csproj, packages.config, and some .cs files
  submodules-1 to n: as above

ソリューション全体をコンパイルすると、すべてがうまく機能します。必要に応じて nuget.exe がダウンロードされ、パッケージがインストールされ、そのまま機能します。

nuget パッケージを使用する単一のサブプロジェクトのクローンを作成し、msbuild を使用してビルドに失敗します。見つかりませんnuget.targets。csproj を見ると、次の行が原因のようです。

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

プロジェクトがで始まるパスを参照すること..\..\は私には間違っているように感じますが、これは nuget が生成するものであり、msbuild スクリプトを手書きした経験は非常に限られています。

これを機能させたい理由は、ナゲットパッケージを使用していないときに、プッシュ後にソリューションの一部を非常にうまく構築したジェンキンスです。

たとえば、各サブモジュールに nuget dir を追加し、ソリューションの一部としてコンパイルされていない場合はそれを使用するか、BeforeBuild コマンド ラインを各 csproj に追加するか、.sln を各サブモジュールに追加します。それらのどれもまったく正しくないと感じます。

私はひどく間違ったことをしていますか?それをやめると、すべてがうまくいくでしょうか?

そうでない場合、共有するには醜すぎない方法で誰かが同様の問題を解決しましたか、それともmsbuildを少し勉強して自分でやるべきですか?

4

2 に答える 2

0

SolutionDirプロパティに関連してプロパティを定義することで機能するようになりましたMSBuildProjectDirectory

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>
于 2013-05-22T20:42:52.080 に答える
0

外部の場所をリポジトリとして指定する各プロジェクトに nuget.config を追加してみてください。

<configuration>
 <config>
     <add key="repositoryPath" value="c:\nuget" />
 </config>
 <packageSources>
     <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
 </packageSources>
 <activePackageSource>
     <add key="All" value="(Aggregate source)" />
 </activePackageSource>
 <packageRestore>
     <add key="enabled" value="true" />
 </packageRestore>
</configuration>
于 2013-05-22T20:40:31.367 に答える