首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的VS2010解决方案中规定来自非引用项目的WiX3.5文件源路径?

如何在我的VS2010解决方案中规定来自非引用项目的WiX3.5文件源路径?
EN

Stack Overflow用户
提问于 2011-11-01 20:37:48
回答 1查看 318关注 0票数 0

我一直在寻找一段相当长的时间来回答我关于与WiX3.5安装程序一起使用Team的问题(该安装程序完全安装在Team上)。简而言之,我的问题与许多论坛问题相似,但略有扭曲。为了引用Wix片段中的组件,我们使用了以下模式:

代码语言:javascript
复制
<Component Id="SomeAssembly.dll" Guid="80C99053-D78C-449C-9645-9031E50FD95F">
    <File Id="SomeAssembly.dll" Source="$(var.MyNamespace.TargetDir)\SomeAssembly.dll" KeyPath="yes"/>
  </Component>

当您在var.MyNamespace.TargetDir项目中使用项目引用时,WiX构建引擎自动提供$( WiX )变量。我已经注意到,在我的解决方案中只能使用Project,这是我的问题开始的地方。

在我的团队构建定义中,我有许多作为构建过程的一部分构建的解决方案(到目前为止大约有30个),因为这些组件可以用于在同一源树中组成许多其他产品。但是,当team build运行时,组件文件的相对路径更改为平面(ish)文件结构的路径(在上面的示例中是很好的),但是对于纯相对路径方式引用的程序集,由于构建过程移动了项目输出,组件会失败。

克服这个问题的最好方法是什么?我是否应该创建一个巨大的解决方案,其中包含我的每个项目,并使用整个项目引用?还是有一个更整洁的工作密集的方式,我可以解决这个问题?

谢谢您抽时间见我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-06 19:24:03

最后,我通过使用一个“路径变量”文件来解决这个问题,我随后使用预处理器指令将其包含在我的所有*.wxs文件中。

对于在我的WiX项目中没有被项目引用直接引用的项目,我对变量复制了相同的命名约定。

Namespace.ProjectName.TargetDir

并使用Visual生成中定义的DevEnvDir变量,该变量位于一组预先处理器if和定义中。丑陋来自DevEnvDir变量,而不是由Team正式设置的,但是它被设置为“如果不是在Visual中构建就没有定义的话”的值,我认为这是非常不愉快的。这使得很难简单地使用一种方法。

我对PathVariables.wxi文件的处理方法:

代码语言:javascript
复制
<!-- Safety check for the variable -->
<?ifndef DevEnvDir ?>
    <?define IsDesktopBuild = false ?>
<?else?>
   <?if $(var.DevEnvDir) = "*Undefined if not building from within Visual Studio*" ?>
     <?define IsDesktopBuild = false ?>
   <?else?>
      <?define IsDesktopBuild = true ?>
   <?endif?>
<?endif?>

在此之后,您需要设置以下任何附加内容:

代码语言:javascript
复制
<?if $(var.IsDesktopBuild)=false ?>
   <!--Build is TFS2010, default is to the OutDir variable -->
  <?define Namespace.Project.TargetDir = "$(var.OutDir)"?>
<?else?>
  <!-- Build is Local Build -->
  <?define Namespace.Project.TargetDir = C:\LocalFolderPath\Bin\$(var.Configuration)"?>
<?endif?>

然后,在任何wxs文件中,确保包含了以下内容:

代码语言:javascript
复制
<?include [PathAsAppropriate]\PathVariables.wxi ?>

然后,无论本地构建还是团队构建,您都可以以相同的方式通用地引用文件路径。

代码语言:javascript
复制
<Component Id="Namespace.Project.dll" Guid="*">
    <File Id="Namespace.Project.Dll" Source="$(var.Namespace.Project.TargetDir)\Project.dll"/>
</Component>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7972569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档