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