我有一个包含几个项目的解决方案。除了一个之外,其他都是类库项目,用于多种解决方案,作为 git 子模块包含在内,并且没有 .sln 文件,只有 .csproj 和 .cs 源。
像这样的东西(一行,一个存储库)
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 包时,它在推送之后构建了解决方案的任何部分。
我可以看到一些方法来完成这项工作,例如可以将 nuget dir 添加到每个子模块并使用它,如果没有编译为解决方案的一部分,或者向每个 csproj 添加一些 BeforeBuild 命令行,或者向每个子模块添加一个 .sln。这些都不对。
我是不是做错了什么,当我停止这样做时,一切都会奏效吗?
如果没有,是否有人以不太难看的方式解决了类似的问题,还是我应该研究一下 msbuild 并自己做?