Я перенес код из Wix 2.0 и 4.0.А также перенес Visual Studio 2005 в Visual Studio 2017 Затем, когда я строил проект wix
, я получил следующую ошибку:
light.exe (0,0) Ошибка LGHT0001: Значениене может быть пустым
Когда я проводил расследование, я обнаружил, что основной причиной проблемы является использование модулей слияния, которые я использовал.
У меня есть следующий код, связанный с модулями слияния в PCPE_Wix_Installer_EN.файл wxs.
<Merge Id="Microsoft_VC80_CRT_x86" Language="1033" DiskId="1" SourceFile="E:\Code\PCPE\Install\MSVC Dlls\Microsoft_VC80_CRT_x86.msm" />
<Merge Id="policy_8_0_Microsoft_VC80_CRT_x86" Language="1033" DiskId="1" SourceFile="E:\Code\PCPE\Install\MSVC Dlls\policy_8_0_Microsoft_VC80_CRT_x86.msm" />
<Feature Id="MicrosoftVCCRT" Title="Microsoft Visual Studio Redistributables" Level="1" Display="hidden">
<MergeRef Id="Microsoft_VC80_CRT_x86" />
<MergeRef Id="policy_8_0_Microsoft_VC80_CRT_x86"/>
</Feature>
А в Build.xml у меня есть следующий код
<property name="CRT.msm.file" location="${install}\MSVC Dlls\Microsoft_VC80_CRT_x86.msm"/>
<property name="policy.msm.file" location="${install}\MSVC Dlls\policy_8_0_Microsoft_VC80_CRT_x86.msm"/>
<delete file="policy_8_0_Microsoft_VC80_CRT_x86.msm"/>
<delete file="Microsoft_VC80_CRT_x86.msm"/>
Это пакеты MSM MergeModule, которые поставляются с Visual Studio 2005 и хранятся в общей папке.и использую сейчас.Но эти MSM-файлы отсутствуют в программных файлах / commanfiles. Теперь я не использую Visual Studio 2005.
А также я установил распространяемый Visual Studio 2017, чтобы получить самые последние файлы .msm
Microsoft_VC141_CRT_x86.msm
по следующему пути:
C: \ Program Files \ Microsoft Visual Studio \ 2017 \ Professional \ VC \ Redist \ MSVC \ 14.14.26405 \ MergeModules
Но я не использую MSM-файлы, созданные с помощью VS2017, вместо этого я использую MSM-файлы, созданные с помощью VS2005.
Но с изменениями при сборке проекта wix компиляция работает нормально.Но при связывании света выдается пустое исключение.
Ниже приведен файл .wixobj, созданный с помощью PCPE_Wix_Installer_EN.wxs
PCPE_Wix_Installer_EN.wixobj
А вот если мы увидимGUID показывает «{00000000-0000-0000-0000-000000000000}», как показано ниже:
<table name="WixMerge">
<row sourceLineNumber="E:\Code\PCPE\Wix\src\PCPE_WiX_Installer_EN.wxs*91"><field>Microsoft_VC80_CRT_x86</field><field>1033</field><field>INSTALLDIR</field><field>E:\Code\PCPE\Install\MSVC Dlls\Microsoft_VC80_CRT_x86.msm</field><field>1</field><field></field><field></field><field>{00000000-0000-0000-0000-000000000000}</field></row>
<row sourceLineNumber="E:\Code\PCPE\Wix\src\PCPE_WiX_Installer_EN.wxs*92"><field>policy_8_0_Microsoft_VC80_CRT_x86</field><field>1033</field><field>INSTALLDIR</field><field>E:\Code\PCPE\Install\MSVC Dlls\policy_8_0_Microsoft_VC80_CRT_x86.msm</field><field>1</field><field></field><field></field><field>{00000000-0000-0000-0000-000000000000}</field></row></table>
Итак, в конце концов я заподозрил, что из-за этого мы получаем исключение NULL-значений »LGHT0001: Значение не может быть пустым "
И на данный момент и для тестирования я прокомментировал вышеупомянутый фрагмент кода файла MSM в PCPE_Wix_Installer_EN.wxs, и с этим ошибка устранена.
Пожалуйста, предоставьте вашвходы и мысли по этому поводу.