如何在Visual Studio的后期构建事件中获取解决方案目录的动态路径

3
我在我的解决方案中有七个代码库项目,我有三种不同类型的网站都使用同一个来自VSS的代码库项目。
现在我想在其中一个引用代码库项目中添加后构建脚本,这样当构建完成时,它会将一个特定的DLL放到我的网站bin目录中。
例如,我有一个名为“references”的引用项目,在其项目属性中将放置以下代码以获取解决方案网站bin目录。
xcopy /Y $(ProjectDir)Tridion $(SolutionDir)Com.Emirates.Pss.Ibe.UI\Bin

以下内容适用于我的一个名为“Com.Emirates.Pss.Ibe.UI”的网站项目,对于在“references”项目中检查过的用户,并且其他开发人员获取了该项目的最新版本时,在其后期构建脚本中会出现“Com.Emirates.Pss.Ibe.UI”这个问题,然而它的解决方案网站目录是“Com.Emirates.Pss.MYBooking.UI”。
如何使xcopy /Y $(ProjectDir)Tridion $(SolutionDir)Com.Emirates.Pss.Ibe.UI\Bin(加粗部分动态),以便任何检入用户都可以轻松构建其应用程序,而无需进行更改。
3个回答

4
这是所有不同的构建后事件宏列表。
如果我理解正确,我猜你想使用$(ProjectDir)宏?
如果你正在使用MSBuild,另一个选择是在VS中添加用户定义宏变量,创建自己的属性表,如示例所示。
<PropertyGroup Label="UserMacros">
      <MyProj>Com.Emirates.Pss.Ibe.UI</MyProj>
</PropertyGroup>

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

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

例如:

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

在引用项目中,使用以下命令进行复制: xcopy /Y $(ProjectDir)Tridion $(SolutionDir)%MyProj%\Bin

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


$(ProjectDir)将提供当前项目目录,但我想复制我的网站bin目录中配置的dlls。 - Manoj Singh
更新了我的答案,提供了另一种选择。 - Blachshma
我需要在哪里创建 </PropertyGroup>? 是需要在代码项目中创建还是在网站中创建?如果需要在代码项目中创建,而该项目又被其他解决方案共享,则上述解决方案对我无效,因为在这种情况下,一个用户根据自己的项目进行更改并进行检查,然后第二个用户从vss获取最新版本,那么他将获得相同的设置。请建议。 - Manoj Singh
@M.S 设置环境变量是可行的选择吗? - Blachshma

0
我通过在“引用”项目的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

0

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


我需要从另一个项目中获取一个DLL文件,然后在其后期构建事件中将其复制到解决方案网站的bin目录中。 - Manoj Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接