Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 如何在VS2010解决方案中规定WiX3.5文件源路径,以便从未引用的项目开始工作_Visual Studio 2010_Wix_Tfsbuild_Wix3.5 - Fatal编程技术网

Visual studio 2010 如何在VS2010解决方案中规定WiX3.5文件源路径,以便从未引用的项目开始工作

Visual studio 2010 如何在VS2010解决方案中规定WiX3.5文件源路径,以便从未引用的项目开始工作,visual-studio-2010,wix,tfsbuild,wix3.5,Visual Studio 2010,Wix,Tfsbuild,Wix3.5,我已经花了相当长的时间寻找关于结合使用TeamBuild和WiX3.5安装程序(完全安装在TeamBuild代理上)的问题的答案。简言之,我的问题与论坛上的许多问题相似,但有点扭曲。为了引用Wix片段中的组件,我们使用以下模式: <Component Id="SomeAssembly.dll" Guid="80C99053-D78C-449C-9645-9031E50FD95F"> <File Id="SomeAssembly.dll" Source="$(var.My

我已经花了相当长的时间寻找关于结合使用TeamBuild和WiX3.5安装程序(完全安装在TeamBuild代理上)的问题的答案。简言之,我的问题与论坛上的许多问题相似,但有点扭曲。为了引用Wix片段中的组件,我们使用以下模式:

<Component Id="SomeAssembly.dll" Guid="80C99053-D78C-449C-9645-9031E50FD95F">
    <File Id="SomeAssembly.dll" Source="$(var.MyNamespace.TargetDir)\SomeAssembly.dll" KeyPath="yes"/>
  </Component>

其中,当您在WiX项目中使用项目引用时,WiX生成引擎会自动提供$(var.MyNamespace.TargetDir)变量。我注意到,只有在我的解决方案中使用项目引用是可能的,而我的问题就是从这里开始的

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

克服这个问题的最佳方法是什么?我是否应该创建一个包含我的每个项目的巨大解决方案,并始终使用项目引用?还是有一种更整洁、工作强度更低的方法可以解决这个问题


谢谢你抽出时间

最后,我通过使用一个“路径变量”文件解决了这个问题,随后我使用pre-processor指令将该文件包含在所有*.wxs文件中

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

Namespace.ProjectName.TargetDir

并在一组预处理器if和defines中使用Visual Studio生成中定义的DevEnvDir变量。丑陋来自DevEnvDir变量,当它还没有被TeamBuild正式设置时,但它被设置为“如果不是从VisualStudio内部构建,则未定义”的值,我认为这是非常不愉快的。这使得很难简单地使用一种方法

我的PathVariables.wxi文件方法:

<!-- 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?>

在此之后,您需要按照以下方式设置任何附加选项:

<?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?>


您好,我不确定您是否应该为自己的答案投票,但这对我使用TFS2010和WIX3.5绝对有效
<?include [PathAsAppropriate]\PathVariables.wxi ?>
<Component Id="Namespace.Project.dll" Guid="*">
    <File Id="Namespace.Project.Dll" Source="$(var.Namespace.Project.TargetDir)\Project.dll"/>
</Component>