2013-11-26 7 views
1

Я написал диалоговое окно сохранения и открытия для проекта VBA, над которым я работаю, - ссылка на ссылку VBA: Get Excel FileDialogOpen to point to "My Computer" by default (спасибо за помощь @mehow).Регистрация Dll, написанная на C# на компьютере с сервером Windows - (Установить библиотеку классов C#)

Теперь это добавление (библиотека классов, как оно называется) отлично работает с проектом vba на моем компьютере, на котором я его разрабатывал. Однако теперь, чтобы использовать это добавление (Class Library) на сервере, я не могу получить аддон, зарегистрированный успешно, чтобы проект VBA мог его увидеть.

Я написал диалоговое окно на C# с помощью VS 2013 Express для рабочего стола на моей машине с Windows 8, и теперь мы пытаемся протестировать его на машине Windows Server 2008, где проект VBA будет работать в конце дня ,

Я попытался использовать команду regsvr32 на сервере, а также искать вариант развертывания в VS 2013, но, похоже, не работает! Я также попытался найти решение, но пока не повезло.

Если у кого-то есть идеи, как это можно сделать, это было бы очень признательно. Извините, если я не использую правильную терминологию. , , add ins и т. д., но я надеюсь, что вы поняли, что я имею в виду.

Большое спасибо

Tristan.

+0

Вы пробовали 'regasm/i/codebase yourAssembly'? Является ли ваша сборка (и тип) ComVisible? – Luaan

+0

Это первый раз, когда я использовал VS и т. Д., И мне нужно было зарегистрировать dll и т. Д., Поэтому я совсем не сомневался. Но, глядя в свойства проекта vs, есть флажок ComVisible. Как именно я буду идти по egasm/i/codebase yourAssembly? Благодарю. – Tristan

+0

О, простите, проигнорируйте мой комментарий. Кажется, что regasm установлен только как часть VS или Windows SDK, поэтому, вероятно, он не предназначен для использования в производстве. Вы можете использовать команду на своем собственном компьютере для создания файла reg, который вы можете запускать самостоятельно, т.е. откройте Visual Studio Command Prompt, запустите 'regasm/regfile/codebase yourAssembly.dll'. Это приведет к созданию файла reg, который вы можете добавить в реестр вашего целевого компьютера. У меня были некоторые проблемы с этим, так что этого может быть недостаточно. Также обратите внимание, что вы можете использовать только флаг/codebase, если ваша сборка подписана. – Luaan

ответ

1

Если вы хотите зарегистрировать .dll нужно положить его в сборке - C:\Windows\assembly

Чтобы сделать это, вам нужно использовать gacutil.exe утилиту и выполнить

gacutil.exe /if Your_dll_name.dll 
+0

Привет @Nogard, спасибо за помощь. Будет ли я запускать это на сервере или на моей машине разработки? Мне нужно установить эту DLL на сервер, который не имеет VS и т. д. Из документации, которую я читал относительно «gacutil», она, похоже, является частью VS, поэтому мне нужно будет иметь VS на сервере, который хочет запустить его чтобы зарегистрировать его там? Кроме того, содержит ли «Your_dll_name.dll» имя пути, в котором находится файл? Благодарю. – Tristan

+0

'gacutil' - автономная утилита и может быть безопасно скопирована на сервер - для нее не требуется полная установка VS. Что касается имени - в общем случае, да, полный путь к dll должен быть написан – Nogard

3

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

Во-первых, Visual Studio 2013 Express не включает «Проекты установки», поэтому вы не можете создавать в нем пакеты развертывания для использования при установке вашего проекта на других компьютерах, поэтому вам нужно сделать это вручную.

Тогда вам также понадобится такая же инфраструктура .Net на вашем целевом компьютере, как вы использовали для написания вашего проекта, - это не сложно, если вы думаете об этом, но проверяете работу.

Так я скопировал .dll, .pdb & .tlb файлов из Visual Studio проектов bin\Debug папку на моем компьютере разработки и поместить их в папку на серверах C: привода.

Затем открыл командную строку от имени администратора (правой кнопкой мыши на иконку в стартовом меню и нажать кнопку «Запуск от имени администратора». Затем перейдите в командной строке в папку .Net вашего целевого компьютера с помощью cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 папки вы найдете "

Однажды я побежал regasm /codebase "C:\MyClassLibraryFolder\MyClassLibrary.dll" и regasm /tlb /codebase "C:\MyClassLibraryFolder\MyClassLibrary.dll", и это, казалось, зарегистрировать все, и пусть мой VBA запустить проект на сервере с помощью MyClassLibrary.

Из моего чтения regasm установлена ​​с .Net 4+ (и если его нашли в эта папка на сервере) и gacutil, кажется, больше не включены, и когда это чтобы запустить его на сервере, скопировав его через него, похоже, ничего не делал.

Если это не работает, я тоже побежал эти команды, чтобы они могли бы добавить к победе regtlibv12.exe нашел в Register type library x64 regtlib, который также упоминает Regasm /tlb

И эта связь подобно тому, как хорошо Using C# Class Library On Non-Development Machine

Для получения информации о regasm - http://msdn.microsoft.com/en-us/library/tzat5yw6%28v=vs.110%29.aspx

Надеюсь, это поможет.

Спасибо всем за ваши предложения.

+0

+1 Тристан очень хорошее описание. Одно дело - вам, вероятно, не нужен '.pdb' :) –