Вопрос

Мне нужно развернуть несколько версий одного и того же проекта C # .NET. Вывод проекта - это сборка COM-интерфейса, которая будет использоваться в собственном приложении. Проблема у меня есть, это то, что я должен развернуть несколько версий этой сборочной стороной, но все, что мне делать, не создает разных версий. Вместо этого версии переопределяют друг друга.

Я попытался изменять GUID GUID, попробовал изменение номеров версий сборки, попытался восстановить клавишу «Сборка балла», попробовал изменение заголовка и описания сборки. Я бы предпочел не нужно менять GUID или имена для отдельных типов в сборке для целей версий.

Как я могу убедиться, что эти версии не переопределяют друг друга и что я вижу и развернут их рядом?

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace InteropTest
{
    [Guid("...")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class Test
    {
        public Test()
        {
        }

        public string Version
        {
            get
            {
                return "1.0";
            }
        }
    }
}
Это было полезно?

Решение

Я бы предпочел не нужно менять GUID или имена для отдельных типов в сборке для целей версий.

Но это точно Что вы должны сделать, чтобы предотвратить вмешательство COM-типов друг с другом. [GUID] используется для выбора ключа реестра в HKLM Software Classes CLSID, где зарегистрирован COM-класс. Две разные версии с тем же GUID будут перезаписать все другие ключи. В противном случае известен как DLL ад. Изменение общедоступного интерфейса требует Новый GUID для обеспечения того, чтобы клиенты, которые используют старый, не умирают с невозможным диагностики плохого поведения. Потрясающий компетенция.

Опуская атрибут [GUID] очень возможен, вы сейчас оставьте его в CLR для создания одного для вас. Теперь атрибуты сборки начинают воспроизводить роль, значение GUID является автоматически генерируется алгоритмом Slick, который включает в себя имя сборки и версию, а также набор методов на интерфейсе и их аргументы. Таким образом, обеспечивая это Любые Изменения автоматически производят другой GUID. И, как и ожидалось, и требуется, другой [Assockerversion] будет генерировать другой [GUID].

Другой подход, который является то, что я предполагал, что вы имели в виду с «бок о бок», должен нет Зарегистрируйте сборку, но вместо этого полагайтесь на проявление. Он должен быть встроен в клиентскую программу, вы используете <clrClass> элемент, чтобы объявить ваш [Comisible] класс. Версификация теперь становится деталей развертывания. MSDN How-to здесь. Отказ Имейте в виду, что он должен быть встроен в клиент Программа, а не ваша [неизбежная] сборка. Это имеет тенденцию быть проблемой.

Другие советы

Попробуйте поздние привязки к вспомогательной сборке в вашей собственной приложении, если вы можете. Я также советую к автоматическому генерации интерфейса с использованием Autodual и вместо этого явно создавая собственное чтение это для получения дополнительной информации. Вы можете устранить проблему, открывая REGEDIT и поиск GUID и Progid, чтобы увидеть, какие версии сборки были зарегистрированы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top