Как добавить манифест сборки в проект библиотеки классов С#.NET в Visual Studio 2008?

У меня такая же проблема, как у Павла год назад (см. Как добавить манифест в .NET DLL?). То есть, у меня есть проект библиотеки классов С# в Visual Studio 2008, который выводит DLL. DLL ссылается на некоторые частные сборки, поэтому я хочу добавить манифест сборки в dll, который указывает эти другие ссылочные сборки.

Я знаю, как это сделать для исполняемого файла, это просто appName.exe.manifest, и когда файл включен в проект, вы можете просто выбрать его как манифест в свойствах проекта.

Согласно ответу, что Рубен дал Пол (в вышеупомянутом потоке), манифест применим только к exes. Тем не менее, документация Microsoft на манифесты, по-видимому, предполагает иное (исправьте меня, если я ошибаюсь), Манифест сборки MSDN:

манифест сборки - это XML файл который описывает бок о бок сборка. В манифесте Ассамблеи описываются имена и версии бок о бок сборки, файлы и ресурсы сборка, а также зависимость сборки от другой бок о бок сборки. Верный установки, активации и выполнение сборочных сборок требует, чтобы манифест сборки всегда сопровождайте сборку на система.

Из-за того, что бок о бок ищет частные сборки, применяются следующие ограничения имен при упаковке DLL как частной сборка. Рекомендуемый способ это должно показать манифест сборки в DLL как ресурс. В этом случае идентификатор ресурса должен равняться 1 и имя частной сборки может быть таким же, как имя DLL. Например, если имя DLL Microsoft.Windows.mysample.dll, значение атрибута name, используемого в элемент assemblyIdentity манифест также может быть Microsoft.Windows.mysample.

Альтернативный способ - поставить манифест сборки в отдельном файле. В этом случае имя сборки и его манифест должен быть разным чем имя DLL. Например, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest, и Microsoft.Windows.Mysample.dll

Итак, я создал манифест сборки assemblyName.manifest как отдельный файл и включил его в проект библиотеки классов. Но когда я перехожу к свойствам проекта, я получаю тот же результат, что и Павел, возможность использования вашего собственного манифеста отключена.

Я что-то делаю неправильно? Как добавить манифест в сборку?

Ответы

Ответ 1

То, что вы цитируете, совершенно неуместно для сборников .NET. Кэш сторонних сторон Windows предназначен для неуправляемых библиотек DLL, точным эквивалентом в .NET является GAC. Кроме того, компилятор уже содержит ссылки на зависимые сборки в манифесте сборки. Вы можете увидеть это, если вы запустите Ildasm.exe на своей сборке. Дважды щелкните манифест, вы увидите перечисленные директивы сборки.

Fwiw, внедрение вашего собственного манифеста Windows в библиотеке классов не является проблемой. Просто используйте Project + Добавить новый элемент и выберите элемент шаблона манифеста приложения. Автогенерированный контент совершенно неверен для библиотеки DLL, но встраивается в DLL. Вы можете увидеть это, используя File + Open + File и выбрав свою сборку. Вы увидите RT_MANIFEST с идентификатором ресурса 2. Просто повторите: не делайте этого для управляемой DLL, если вы не хотите вводить reg-free COM-директивы.