我使用Visual Studio 2017创建了一个解决方案,该解决方案包含Windows Service C#项目和InstallShield 2016 Basic MSI项目。
InstallShield项目添加了一个组件。此组件使用Component-> Files-> Add File ...(下方)添加了许多文件
请注意使用VSSolutionFolder。
现在,当我使用InstallShield 2016打开InstallShield项目(.ism)并构建项目时,我收到以下构建错误:
cityCtrl
在媒体路径变量中,有一个VSSolutionFolder,其值为 UNDEFINED 。
我无法更改此当前值 - UI不允许它。定义的值不能改变,测试值似乎没有多大作用。
我将项目保存为xml,但我只看到文件路径中引用的Loading File table
ISDEV : error -6103: Could not find file "<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe"
ISDEV : error -6103: Could not find file "<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe.config"
ISDEV : error -6103: Could not find file "<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.pdb"
ISDEV : error -6103: Could not find file "<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\App.config"
Building MsiFileHash table
ISDEV : error -6271: File <VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe not found. An error occurred building the MsiFileHash table record for this file. Verify that the file exists in the specified location.
ISDEV : error -6271: File <VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe.config not found. An error occurred building the MsiFileHash table record for this file. Verify that the file exists in the specified location.
ISDEV : error -6271: File <VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.pdb not found. An error occurred building the MsiFileHash table record for this file. Verify that the file exists in the specified location.
ISDEV : error -6271: File <VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\App.config not found. An error occurred building the MsiFileHash table record for this file. Verify that the file exists in the specified location.
Adding instance transforms to substorage...
ISDEV : error -1007: Cannot copy source '<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe' to target 'E:\Installshield\WebDeploy\Windows Services\ACMECorp.App.Service\ACMECorpSetup\ACMECorpSetup\Default Configuration\Release\DiskImages\DISK1\program files\ACME Corp\ACME Corp Service 0\ACMECorp.App.Service.exe'
ISDEV : error -1007: Cannot copy source '<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe.config' to target 'E:\Installshield\WebDeploy\Windows Services\ACMECorp.App.Service\ACMECorpSetup\ACMECorpSetup\Default Configuration\Release\DiskImages\DISK1\program files\ACME Corp\ACME Corp Service 0\ACMECorp.App.Service.exe.config'
ISDEV : error -1007: Cannot copy source '<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.pdb' to target 'E:\Installshield\WebDeploy\Windows Services\ACMECorp.App.Service\ACMECorpSetup\ACMECorpSetup\Default Configuration\Release\DiskImages\DISK1\program files\ACME Corp\ACME Corp Service 0\ACMECorp.App.Service.pdb'
ISDEV : error -1007: Cannot copy source '<VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\App.config' to target 'E:\Installshield\WebDeploy\Windows Services\ACMECorp.App.Service\ACMECorpSetup\ACMECorpSetup\Default Configuration\Release\DiskImages\DISK1\program files\ACME Corp\ACME Corp Service 0\App.config'
,如下所示:
VSSolutionFolder
有没有办法在InstallShield中设置<row>
<td>acmecorp.app.service.exe</td>
<td>ACMECorpServiceFilesComponent</td>
<td>ACMECO~1.EXE|ACMECorp.App.Service.exe</td>
<td>0</td>
<td/>
<td/>
<td/>
<td>1</td>
<td><VSSolutionFolder>\ACMECorp.App.Service\bin\Debug\ACMECorp.App.Service.exe</td>
<td>1</td>
<td/>
</row>
?或者是否有某种方法来解决这个问题。
理想情况下,我希望它只需加载Visual Studio和InstallShield而不必查看源位置 - 是的我可以删除文件并重新添加,但这不是问题(如果我有一个更大的解决方案,它将不会“我认为不可接受”。
答案 0 :(得分:0)
我个人建议您将应用程序代码和安装程序代码保存在两个不同的解决方案中。有几个原因包括:
1)VS的新版本出现,IS尚不支持,你不想被阻止。
2)简化项目依赖关系并构建订单关系。首先构建应用程序代码,然后再构建安装程序代码。
3)根据您在agile / devops谱图中的位置,您可能希望将花生酱和巧克力分开。
在这种情况下,我使用postbuild xcopy命令和msbuild发布配置文件将我的应用程序代码分级到.ISPROJ和.ISM所在目录中工作空间中的“Deploy”目录。从那里InstallShield只使用标准的ISPROJECTDIR路径变量引用。现在您不必处理项目输出引用的复杂性。您有一个很好的模型,它定义了您部署的应用程序的外观。
答案 1 :(得分:0)
尝试覆盖路径变量。您可以使用stringName.substring()
等外部方法或“发布配置”属性路径变量覆盖来执行此操作。 (请注意,使用MSBuild构建解决方案应该已经正常工作。)
如果存在覆盖VSSolutionFolder本身的问题,您可以更改文件链接以使用定义为使用iscmdbld -L...
作为其默认路径的新标准变量,但绝对允许您覆盖它。