“Не мог загрузить тип [Пространство имен].Global” порождение меня горе

В моем приложении.Net 2.0 Asp.net WebForms у меня есть свой Global.asax, содержащий следующий код:

<%@ Application CodeBehind="Global.asax.cs" Inherits="MyNamespace.Global" Language="C#" %>

Однако, когда я создаю, я получаю ошибку при утверждении -

Не мог загрузить тип 'MyNamespace. Глобальный'.

Это, кажется, потому что пространство имен MyNamespace (определенный в коде позади файла Global.asax.cs) не замечено компилятором в файле Global.asax (не показывает в R# intellisence..). Это оказалось очень трудной задачей... любая справка будет цениться!

Примечание: Global.asax и Global.asax.cs расположены в той же папке.

Note2: При компиляции от по сравнению с подсказкой с csc это компилирует хорошо.

105
задан Ben Smith 31 January 2015 в 01:13
поделиться

3 ответа

Вы изменили пространство имён своего проекта? Я видел, как это иногда случалось, когда я менял пространство имён в диалоге свойств проекта, но Visual Studio не изменила объявление пространства имён в существующих кодовых файлах.

.
17
ответ дан 24 November 2019 в 03:58
поделиться

Нельзя создавать экземпляры классов с частными конструкторами, если это не вложенный класс.

http://msdn.microsoft.com/en-us/library/kcfb85a6%28VS.71%29.aspx

-121--1487050-

Если это внутренняя сборка, которая не является вашей, и конструктор помечен как частная , автор сборки очень старается помешать созданию объекта.

Приведенное ниже действительно зло, поскольку вы полагаетесь на непубличные классы и методы, которые могут измениться на вас без предварительного уведомления.

Добавлено: System.ServiceModel.Channels.SelfSignedCertificate - это внутренний класс, который я пытаюсь использовать

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

При этом можно выполнить следующее:

MethodInfo method = Type.GetType(assemblyQualifiedName).GetMethod("Create");
ABC o = (ABC)method.Invoke(null, new[] { "test" });

При этом вызывается статический метод Create . Другой вариант -

MethodInfo method = Type.GetType(assemblyQualifiedName).GetConstructor(
                        BindingFlags.NonPublic | BindingFlags.Instance,
                        null,
                        new[] { typeof(string) },
                        null
                    );
ABC o = (ABC)method.Invoke(new[] { "test" });

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

Простым способом получения имени сборки является

string name = typeof(somePublicType).Assembly.GetType("Namespace.ABC");

, где somePublicType является общедоступным типом в той же сборке, что и ABC .

-121--1487048-

Проверьте действие построения Global.asax.cs. Для него должно быть установлено значение Compile.

В обозревателе решений щелкните правой кнопкой мыши Global.asax.cs и выберите Свойства. На панели «Свойства» набора действие построения ( не отладка).

По умолчанию VS 2008 не всегда правильно добавляет файлы .asax (.cs).

3
ответ дан 24 November 2019 в 03:58
поделиться

Я новичок в разработке asp .net и столкнулся с аналогичной проблемой.

Я обновил класс как частичный класс, и он работал нормально.

public partial class Global : System.Web.HttpApplication
14
ответ дан 24 November 2019 в 03:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: