Ссылка на Shell32.dll?

c# compiler-errors csc shell32.dll

1159 просмотра

2 ответа

У меня нет .NET 4.5 для распаковки zip-файлов, поэтому я использую Shell32вот так . Но когда я ссылаюсь на DLL, как это:

csc.exe /r:"C:\Windows\System32\shell32.dll" ...

Я получаю эту ошибку:

fatal error CS0009: Metadata file 'c:\Windows\System32\shell32.dll' could not be opened -- 'An attempt was made to load
    a program with an incorrect format. '

Обновление: без Visual Studio, просто csc.exe.

Источник Размещён: 08.11.2019 11:10

Ответы (2)


2 плюса

Решение

Shell32 - это COM-сервер, который вы можете использовать в своей программе на C #. Однако сначала необходимо сгенерировать сборку взаимодействия, чтобы преобразовать библиотеку типов внутри shell32.dll (та же идея, что и метаданных .NET) в объявления, понятные CLR. Либо запустив Tlbimp.exe, либо, что намного проще, добавив ссылку на DLL в IDE.

Пока вы делаете это из командной строки и не используете msbuild для компиляции файла проекта .csproj, вам придется делать то же самое, что делает msbuild, запускать tlbimp. Для shell32.dll это нужно сделать только один раз, и вы можете включить библиотеку взаимодействия в системе контроля версий, чтобы вам не пришлось делать это снова. Используйте / r в библиотеке взаимодействия.

Использование IDE или MSBuild.exe, конечно, разумный выбор. Это также помогает вам попасть в пропасть успеха. Вы действительно хотите использовать функцию «Встраивать типы взаимодействия», чтобы вам не требовалась сборка взаимодействия во время выполнения и не требовалось ее развертывание. Просмотр команд сборки, сгенерированных MSBuild, полезен.

Автор: Hans Passant Размещён: 20.08.2016 12:45

1 плюс

Возможно, потому что вы пытаетесь ссылаться на него как на сборку .NET.

Я бы попытался включить сборку, используя вместо этого аргумент / lib: согласно ...

/lib:dir1[,dir2] Опция компилятора.

Автор: War Размещён: 20.08.2016 11:19
Вопросы из категории :
32x32