Git 让NuGet同时处理整个解决方案和其中包含的单个项目

Git 让NuGet同时处理整个解决方案和其中包含的单个项目,git,msbuild,jenkins,solution,csproj,Git,Msbuild,Jenkins,Solution,Csproj,我有一个包含几个项目的解决方案。除了一个以外,其他所有的都是类库项目,在几个解决方案中使用,作为git子模块包含,并且没有.sln文件,只有.csproj和.cs源代码 类似这样的内容(一行,一个存储库) 在编译整个解决方案时,一切都很好地工作——如果需要,可以下载nuget.exe,安装软件包,它就可以正常工作 克隆使用nuget包的单个子项目,然后使用msbuild生成它失败。它找不到numget.targets。从csproj来看,这似乎是因为这些线路: <SolutionDir C

我有一个包含几个项目的解决方案。除了一个以外,其他所有的都是类库项目,在几个解决方案中使用,作为git子模块包含,并且没有.sln文件,只有.csproj和.cs源代码

类似这样的内容(一行,一个存储库)

在编译整个解决方案时,一切都很好地工作——如果需要,可以下载nuget.exe,安装软件包,它就可以正常工作

克隆使用nuget包的单个子项目,然后使用msbuild生成它失败。它找不到
numget.targets
。从csproj来看,这似乎是因为这些线路:

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
。\\
...
让项目引用以
。\..\
开头的路径对我来说是错误的,但这是nuget生成的,我手工编写msbuild脚本的经验非常有限

我之所以希望这样做是因为jenkins,在我没有使用任何nuget包的情况下,它在推送后非常出色地构建了解决方案的任何部分

我可以看到一些方法来实现这一点,例如,可以将nuget dir添加到每个子模块中,并在未作为解决方案的一部分编译时使用它,或者在每个csproj中添加一些BeforeBuild命令行,或者在每个子模块中添加一个.sln。这些感觉都不太对

我是不是做错了什么,当我停止做的时候,一切都会正常运转


若并没有,是否有人以一种不太难看的方式解决了类似的问题,或者我应该学习一下msbuild并自己去做呢

您可以尝试向每个指定外部位置作为存储库的项目添加一个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>

我是通过定义与
MSBuildProjectDirectory
属性相关的
SolutionDir
属性来实现的:

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>
$(MSBuildProjectDirectory)\\

这方面运气好吗?同样的问题…目前没有进行任何.net开发,也没有安装visual studio(或windows),因此我无法验证这是否有效。如果/当我有机会验证它对我也有效时,我将接受作为答案。
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>