MakeSfxCA.exe и DLL, скомпилированные с Framework 4.0 - PullRequest
3 голосов
/ 08 октября 2010

У меня есть файл DLL, скомпилированный с Microsoft .NET Framework 4.0

Когда я использую файл MakeSfxCA.exe и передаю DLL в качестве одного из параметров в командную строку, он выдает мне следующее сообщение об ошибке:*

D:\SetupManager\test>D:\SetupManager\SetupBuilding\Wix\bin\sdk\makesfxca.exe Fil
e2.dll D:\SetupManager\SetupBuilding\Wix\bin\sdk\x86\sfxCA.dll File1.dll CustomA
ction.config
Searching for custom action entry points in File1.dll
Error: System.BadImageFormatException: Could not load file or assembly 'file:///
D:\SetupManager\test\File1.dll' or one of its dependencies. **This assembly is bui
lt by a runtime newer than the currently loaded runtime and cannot be loaded.**
File name: 'file:///D:\SetupManager\test\File1.dll'
   at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boo
lean throwOnFileNotFound, Boolean forIntrospection)
   at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, E
vidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Bool
ean throwOnFileNotFound, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence
 assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence
securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean
 forIntrospection, StackCrawlMark& stackMark)
   at System.Reflection.Assembly.ReflectionOnlyLoadFrom(String assemblyFile)
   at Microsoft.Deployment.Tools.MakeSfxCA.MakeSfxCA.FindEntryPoints(String modu
le)
   at Microsoft.Deployment.Tools.MakeSfxCA.MakeSfxCA.Build(String output, String
 sfxdll, IList`1 inputs, TextWriter log)
   at Microsoft.Deployment.Tools.MakeSfxCA.MakeSfxCA.Main(String[] args)

=== Pre-bind state information ===
LOG: User = DSDMAIN\Rajesh
LOG: Where-ref bind. Location = D:\SetupManager\test\File1.dll
LOG: Appbase = file:///D:/SetupManager/SetupBuilding/Wix/bin/sdk/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This is an inspection only bind.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2
.0.50727\config\machine.config.
LOG: Attempting download of new URL file:///D:/SetupManager/test/File1.dll.
ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.

Любая помощь приветствуется.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Моя проблема была немного другой, но она может быть полезна другим людям. Файл .config должен иметь имя "CustomAction.config" в вашем проекте. Он не может иметь имя <YourCAProject>.config, как это произойдет, когда вы переименуете проект, чтобы дать dll уникальное имя. Похоже, что инструмент сборки MakeSfxCA и заглушка SfxCA зависят от этого имени файла.

2 голосов
/ 23 ноября 2010

У меня возникла похожая проблема: я добавил следующий код в файл CustomActions.config и создал файл MakeSfxCA.exe.config рядом с файлом MakeSfxCA.exe

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>
...