【发布时间】:2016-08-17 15:50:46
【问题描述】:
我有几个 .csproj 文件,我将在其中导入一个通用 .targets 文件,以扩展构建过程。这些项目位于不同的目录中。 .targets 文件位于解决方案目录中。如何参考 .targets 文件的位置来导入它?有一个解决方案目录属性,但如果开发人员只是构建一个项目,这将不起作用。我该怎么办?我正在使用 .NET 4.5 和 Visual Studio 2015。
【问题讨论】:
标签: msbuild
我有几个 .csproj 文件,我将在其中导入一个通用 .targets 文件,以扩展构建过程。这些项目位于不同的目录中。 .targets 文件位于解决方案目录中。如何参考 .targets 文件的位置来导入它?有一个解决方案目录属性,但如果开发人员只是构建一个项目,这将不起作用。我该怎么办?我正在使用 .NET 4.5 和 Visual Studio 2015。
【问题讨论】:
标签: msbuild
您认为项目不知道它所包含的解决方案,而且可以说它不应该知道。因此,从项目的角度来看,您无法以编程方式找出完全不相关的文件所在的位置。除了扫描整个文件系统之外。有一些替代方案:
<Import Project="$(MSBuildProjectDirectory)..\solutionDir\my.targets"/>
<Import Project="$(SomeDir)\my.targets"/>
我曾经使用过所有这些,最后我认为第一个更好:你只需要坚持一个目录约定 - 对于项目你需要跨越多个目录或与公共共享的东西 - 就是这样。例如,我们有大量常见的 msbuild 文件,它们位于一个存储库中。开始一个新项目总是归结为创建一个目录,克隆公共文件目录并添加一个新的项目目录。这可以很容易地实现自动化,在典型的 CI 服务器上也能很好地工作。第二个选项也是可行的,但它依赖于正确设置的环境,该环境不太“独立”,如果开发人员开始在机器的全局环境变量设置和本地环境变量设置中输入变量,那么它会变得非常混乱,等等上。第三个也有类似的问题,但更糟糕的是,现在只有一个正确的位置。
【讨论】: