В моем приложении.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 это компилирует хорошо.
Вы изменили пространство имён своего проекта? Я видел, как это иногда случалось, когда я менял пространство имён в диалоге свойств проекта, но Visual Studio не изменила объявление пространства имён
в существующих кодовых файлах.
Нельзя создавать экземпляры классов с частными конструкторами, если это не вложенный класс.
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
.
Проверьте действие построения Global.asax.cs. Для него должно быть установлено значение Compile.
В обозревателе решений щелкните правой кнопкой мыши Global.asax.cs и выберите Свойства. На панели «Свойства» набора действие построения ( не отладка).
По умолчанию VS 2008 не всегда правильно добавляет файлы .asax (.cs).
Я новичок в разработке asp .net и столкнулся с аналогичной проблемой.
Я обновил класс как частичный
класс, и он работал нормально.
public partial class Global : System.Web.HttpApplication