繁体   English   中英

如何在Visual Studio的post-build事件中获取解决方案目录的动态路径

[英]How to get the dynamic path of solution directory in post-build event of Visual Studio

我的解决方案中有七个代码库项目,我有 3 个不同类型的网站,它们使用来自 VSS 的相同代码库项目。

现在我想将后期构建脚本放在我的参考代码库项目之一中,以便在构建完成后将一个特定的 DLL 放入我的网站 bin 目录。

例如,我有一个名为“references”的参考项目,并且在其项目属性中将放置以下代码以获取解决方案网站 bin 目录。

xcopy /Y $(ProjectDir)Tridion $(SolutionDir)Com.Emirates.Pss.Ibe.UI\Bin

以上内容适用于我的一个名为“Com.Emirates.Pss.Ibe.UI”的网站项目,问题出在一位用户签入“引用”项目,然后其他开发人员获取最新的引用项目时“ Com.Emirates.Pss.Ibe.UI”在其构建后脚本中,但其解决方案网站目录是“Com.Emirates.Pss.MYBooking.UI”。

我怎样才能使 xcopy /Y $(ProjectDir)Tridion $(SolutionDir) Com.Emirates.Pss.Ibe.UI \\Bin(粗体部分是动态的,这样谁签入用户就可以轻松地构建那里的应用程序,而无需进行更改.

这是所有不同的Post-Build 事件宏的列表

我猜你想使用$(ProjectDir)宏,如果我理解正确的话?

另一种选择,如果您使用 MSBuild,您可以在 VS 中添加用户定义的宏变量,创建您自己的属性表,如示例所示:

<PropertyGroup Label="UserMacros">
      <MyProj>Com.Emirates.Pss.Ibe.UI</MyProj>
</PropertyGroup>

用法: xcopy /Y $(ProjectDir)Tridion $(SolutionDir)$(MyProj)\\Bin

最后一个选项是在 MAIN 项目(将在之前运行)中设置一个具有特定项目名称的环境变量,并从references项目中引用它。

例如

在项目 #1 中设置一个Pre- Build 事件: SETX MyProj Com.Emirates.Pss.Ibe.UI

在参考项目中,使用xcopy /Y $(ProjectDir)Tridion $(SolutionDir)%MyProj%\\Bin复制它

应该注意的是 SETX 和 SET 之间的区别在于,即使在 CMD 窗口(运行 MSBuild)关闭之后,SETX 也会保留变量。 但是,您可能必须在第一次运行时关闭并重新打开 Visual Studio,因为使用 SETX 创建的变量只会在使用此命令后创建的任何 CMD 窗口上开始工作。

我只是将 $(SolutionDir) 作为参数传递给您在 PostBuild 事件命令行中调用的 .cmd 文件。 同样,如果您想要 $(ProjectName) 或任何其他可在 PostBuild cmd 中访问的 VS 宏。

我通过将以下代码放在“参考”项目 PostBuildEvent 中解决了我的问题:

if $(SolutionName) == IbeUI-Integrated  xcopy /Y $(ProjectDir)Tridion $(SolutionDir)Com.Emirates.Pss.Ibe.UI\Bin
if $(SolutionName) == MybUI-Integrated  xcopy /Y $(ProjectDir)Tridion $(SolutionDir)Com.Emirates.Pss.Myb.UI\Bin
if $(SolutionName) == OlciUI-Integrated  xcopy /Y $(ProjectDir)Tridion $(SolutionDir)Com.Emirates.Pss.Olci.UI\Bin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM