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 为变量定义设置库项目_Visual Studio_Wix - Fatal编程技术网

Visual studio 为变量定义设置库项目

Visual studio 为变量定义设置库项目,visual-studio,wix,Visual Studio,Wix,我目前正在尝试创建一个包含多个变量定义的库,我可以在不同的安装项目中使用这些变量定义,但没有成功 我有几个巨大的*.wxs文件,它们构建在一个库中,文件/@Source应该取决于项目设置。原因是我们的内部目录结构看起来像Test\X64\productA中的any\path\redistributions\或any\path\redistributions\RC\X86\productA,因此路径的最后两部分应该更改,例如在X64和X86构建上 现在,我也有几个安装项目,它们使用相同的路径,但在

我目前正在尝试创建一个包含多个变量定义的库,我可以在不同的安装项目中使用这些变量定义,但没有成功

我有几个巨大的
*.wxs
文件,它们构建在一个库中,
文件/@Source
应该取决于项目设置。原因是我们的内部目录结构看起来像Test\X64\productA中的
any\path\redistributions\或
any\path\redistributions\RC\X86\productA
,因此路径的最后两部分应该更改,例如在X64和X86构建上

现在,我也有几个安装项目,它们使用相同的路径,但在另一个子目录中工作,例如Test\X64\AnyOtherProductB中的
Redistributables\n

我不想将具有相同值的预处理器变量传递给每个项目,因为路径可能会在以后更改,我将不得不编辑太多的项目设置

因此,我的问题是: 是否可以使用公共变量/属性构建类似“变量/属性容器”的东西,这样我就可以引用该库来为我的
使用其中定义的变量


我曾尝试在
$(var.sourcedir)$(var.compilemode)$(var.platform)
之前使用前置处理器变量来实现这一点,但运气不好。这3个部分我需要定义一次,以便在几乎所有项目中使用它们。

此处进行小编辑,我经常这样做,我快速阅读问题并作出回答,然后重新阅读问题,认为我的答案不太适合问题,但在这种情况下,我希望它仍然有帮助,也许这里引用的其他资源之一也会有所帮助


啊,我做了类似的事情,头撞在墙上,想弄明白

问题是,不能在wixlib中使用
$(var.sourceDir)
等变量,然后在项目中使用lib时再对其进行更改。在构建wixlib时,编译器将wixlib中的
$(var.sourceDir)
替换为该变量的实际值。您可以通过打开obj文件并查找使用此目录的组件或其他内容来验证这一点,并查看它是否具有sourceDir变量not
$(var.sourceDir)

为了解决这个问题,我们将使用bind/wix变量(不确定术语),这些变量在链接时得到评估

是我最终学会的“怎么做”,这对我帮助很大

所以,把你的变量更新成这样!(bindpath.SourceDir)


然后在构建机器上的一些道具文件或项目文件中,您可以包括如下内容:

<LinkerAdditionalOptions>-b &quot;PrerequisitesDir=$(PrerequisitesDir)\&quot;</LinkerAdditionalOptions>
-b“prerequisisesdir=$(prerequisisesdir)\”
其中,$(PrerequisitesDir)属性是基于生成计算机上msbuild文件中的相对路径设置的,如下所示(或者使用绝对路径也可以):


$(MSBuildThisFileDirectory)\\\..\Installers\Premissions\
现在,当您构建链接器阶段时,将使用构建时定义的bindPath来查找源文件


关于平台和配置变量,我认为您可以使用WixVariables作为参考!(wix.VariableName)但是我不确定,如果没有更多的实验我自己。您可以看一看以帮助更熟悉不同类型的变量。如果WixVariables不起作用,您可以只构建几种风格的yoru wixlib,并通过使用MSBuild properties$(配置)等在您的wixproj中引用适当的一种。。在wixlib文件的hintpath中。

您是否在wixproj-$(DefineConstants)中进行了定义;sourcedir=$(sourcedir);compilemode=$(compilemode);平台=$(平台)首先,谢谢你的回答。但是,我不需要在流程中更改变量。我只需要在每个构建中使用一组不同的变量,这就是为什么我认为预处理器变量可以工作的原因。例如,在x86构建中,我在x64
platform=64
中和x64上传递
platform=x86
。这样,我就可以在传递值的项目中访问我的值。这里唯一的一点是,我也需要在其他项目中访问这些值,这似乎是不可能的。是否可以定义wixVariables并将值设置为预处理程序值?如果我是对的,wixvars是公共的?编译或链接阶段需要
源代码吗?因为你可以构建wixlib,而不需要将文件放在它们定义的位置上,我怀疑wix只会在运行light.exe的链接期间通过它们的源代码查找和打包包含的文件。我将尝试添加另一个答案,以充实您想要做的事情。Arkady对这个问题的评论是,为了在wxs文件中使用$(var.configuration)和其他变量,您需要做些什么。Arkady说的是预处理器变量的定义,我知道这一点,我已经在我的项目中使用了它们,这就是重点。无论我想在哪里使用,比如说,
$(var.Foo)
我必须在wixproj中声明它,现在我已经让100个项目在我需要它的地方,
$(var.Foo)
我不会为每个构建定义100次。我需要的,这就是我的问题所在,是一种一次性定义它的方法,这样我就可以在我的100个项目中引用它,而这些项目的定义应该放在一个库中。那么,如果库被引用,我如何定义一个可以从任何地方访问的变量呢?因此,我需要一种可以在
文件/@Source
中使用的变量类型,并且源的定义应该在库中(我想不必是预处理器变量)。我不知道我是否可以使用
WixVariable
Property
或其他什么,这是我问题的一部分。
<LinkerAdditionalOptions>-b &quot;PrerequisitesDir=$(PrerequisitesDir)\&quot;</LinkerAdditionalOptions>
<!-- Directories -->      
<PrerequisitesDir>$(MSBuildThisFileDirectory)..\..\..\Installers\Prerequisites\</PrerequisitesDir>