Hach, er wird Vegetarier, genau wie der Papa!

Hach, er wird Vegetarier, genau wie der Papa!

Habe vorhin ein .NET-2-Programm (Windows Forms) nach .NET 4.5 geändert (also in der Projektkonfiguration in Visual Studio .NET 2012 das Ziel-Framework geändert.
Bei diesem Aufruf hat es dann gekracht:
AppDomain.CurrentDomain.UnhandledException += currentDomain_UnhandledException;
Dort kam dann eine Fehlermeldung:
System.MethodAccessException was unhandled HResult=-2146233072 Message=Fehler beim Versuch der SecurityTransparent-Methode „ZetaHelpdesk.Main.Code.AppHost.Host.Main()“, auf die sicherheitskritische Methode „System.AppDomain.add_UnhandledException(System.UnhandledExceptionEventHandler)“ zuzugreifen.
Die Assembly „zeta-helpdesk, Version=2.1.0.1, Culture=neutral, PublicKeyToken=1dbe5f735b90e083“ ist mit „AllowPartiallyTrustedCallersAttribute“ markiert und verwendet das Sicherheitstransparenzmodell der Stufe 2. Bei Festlegung der Transparenz auf Stufe 2 werden alle Methoden in AllowPartiallyTrustedCallers-Assemblys standardmäßig sicherheitstransparent, was die Ursache der Ausnahme sein kann.
Source=zeta-helpdesk
StackTrace: bei ZetaHelpdesk.Main.Code.AppHost.Host.Main() in c:\P\Zeta Helpdesk\Source\Core\Main\Code\AppHost\Host.cs:Zeile 100. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() bei System.Threading.ThreadHelper.ThreadStart_Context(Object state) bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) bei System.Threading.ThreadHelper.ThreadStart() InnerException:
Wer die Fehlermeldung aufmerksam liest, findet auch schon die Ursache. Da steht nämlich, dass ein Assembly-Attribut hier unpassend ist. Und tatsächlich habe ich folgendes in der Datei „AssemblyInfo.cs“ stehen:
[assembly: AllowPartiallyTrustedCallers]
Ich hatte seinerzeit aus diesem Grund das Attribut eingefügt.
Als ich das Attribut dann entfernt habe, lief alles wie gewünscht. Neu kompilieren natürlich auch noch 😉

Vor kurzem war mein Garagentor „defekt“ im Sinne, dass es nicht mehr richtig hoch/runter fuhr:
Ursache war, dass der Endpunkt sich wohl irgendwie verstellt hatte. Das habe ich dann mithilfe des Handbuchs zum Antrieb entsprechend korrigieren können.
Da das Handbuch die Platine und Schalter irgendwie anders als mein Modell skizziert hatte, habe ich wohl auch irrtümlich dabei die Funkfernbedienung deaktiviert.
Heute habe ich dann mit Try-and-Error tatsächlich die Fernbedienung wieder zum Laufen gebracht:

Die Lösung war dann:
Danach fuhr es bei mir wieder korrekt runter als auch hoch.
Ggf. habe ich auch öfters auf die Fernbedienung gedrückt. Auf jeden Fall läuft es jetzt 🙂 Und der Anschlag oben/unten stimmt auch noch.
Nette Website: Superlame! – Dort könnt Ihr Bilder mit Sprechblasen versehen und das Ergebnis downloaden. Sehr nett!
Schaut dann z.B. so aus:

Heute habe ich bei einem neu deployten Projekt mit ASP.NET 4.5 und MVC 4 folgende Fehlermeldung erhalten:
CS0103: Der Name ‚ViewBag‘ ist im aktuellen Kontext nicht vorhanden
CS0103: The name ‚ViewBag‘ does not exist in the current context
Eine ähnliche Meldung lautet:
CS0103: Der Name ‚model‘ ist im aktuellen Kontext nicht vorhanden
CS0103: The name ‚model‘ does not exist in the current context
Lokal lief alles, auf dem Produktivserver kam die Fehlermeldung. Ich habe lange gesucht, bis ich die funktionierende Lösung gefunden habe.
Die Lösung war im Endeffekt, dass es zwei Web.Config-Dateien gibt:
Diese im Views-Ordner hat bei mir gefehlt. Sobald ich diese hinzugefügt und entsprechend gefüllt hatte, hat alles funktioniert.
Um alle Views in einem Rutsch zu aktualisieren, hilft folgender Code:
DECLARE @view AS VARCHAR(255);
DECLARE views_cursor CURSOR FOR
SELECT TABLE_SCHEMA + '.' +TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'VIEW'
AND OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'IsMsShipped') = 0
ORDER BY TABLE_SCHEMA,TABLE_NAME
OPEN views_cursor
FETCH NEXT FROM views_cursor
INTO @view
WHILE (@@FETCH_STATUS <> -1)
BEGIN
BEGIN TRY
EXEC sp_refreshview @view;
PRINT @view;
END TRY
BEGIN CATCH
PRINT 'Error during refreshing view "' + @view + '".';
END CATCH;
FETCH NEXT FROM views_cursor
INTO @view
END
CLOSE views_cursor;
DEALLOCATE views_cursor;
Funktioniert wunderbar.
In der Praxis z. B. hilfreich, wenn in den zugrunde liegenden Tabellen Spalten hinzugekommen sind oder entfernt wurden.
Gestern hatte ein Kollege beim Aufsetzen einer Website ASP.NET MVC 4 auf einem IIS unter Windows Server 2008 R2 eine Fehlermeldung:
[CryptographicException: Unbekannter Fehler -1073741766.] System.Security.Cryptography.ProtectedData.Protect(Byte[] userData, Byte[] optionalEntropy, DataProtectionScope scope) +504 Oracle.ManagedDataAccess.Client.ConnectionString.Secure() +493 OracleInternal.ConnectionPool.PoolManager`3.Initialize(ConnectionString cs) +1760 OracleInternal.ConnectionPool.OraclePoolManager.Initialize(ConnectionString cs) +21 OracleInternal.ConnectionPool.OracleConnectionDispenser`3.GetPM(ConnectionString cs, PM conPM, ConnectionString pmCS, Byte[] securedPassword, Byte[] securedProxyPassword, Boolean& bAuthenticated, Boolean& newPM) +296 OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, Byte[] securedPassword, Byte[] securedProxyPassword) +1576 Oracle.ManagedDataAccess.Client.OracleConnection.Open() +3756 OracleInternal.EntityFramework.EFOracleProviderServices.GetDbProviderManifestToken(DbConnection connection) +274 System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +91 [ProviderIncompatibleException: Der Anbieter hat keine ProviderManifestToken-Zeichenfolge zurückgegeben.] System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +10947809 System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +48 [ProviderIncompatibleException: An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct.] System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +242 System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +82 System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +88 System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +248 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +524 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +26 System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +71 System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +21 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +446 System.Linq.Enumerable.ToList(IEnumerable`1 source) +80
Zunächst war es eine Herausforderung, statt den „normalen“ Oracle.DataAccess-Klassen die Oracle.ManagedDataAccess-Klassen zum Laufen zu bringen. Hier haben uns zwei Artikel geholfen:
Wir haben dann zum Lösen des eigentlichen Fehlers lange rumgesucht, viel ausprobiert und schließlich beim Weblog-Artikel „SOLVED: Windows Identity Foundation – “The system cannot find the file specified”“ fündig geworden.
Die Lösung bestand dann schlicht darin, im Anwendungspool (App Pool) für die Anwendung die Option „Benutzerprofil laden“ auf „True“ zu stellen:

Danach lief alles wie gewünscht.
Are you a software developer and ever got this message when testing your .NET 2.0 WinForms application on Windows 8?

An app on your PC needs the following Windows feature: .NET Framework 3.5 (includes .NET 2.0 and 3.0)
Even though your application would run on .NET 4, too?
Here is my story on why this happended to me and how to solve.
When you run a .NET application, Windows 8 seems to check whether the required .NET Framework is available. If it is not available, the above message is being displayed.
Windows 8 cannot know whether your application, compiled for .NET 2, also runs on .NET 4. It has the following knowledge:
If you want Windows 8 to be aware of anything other, you have to tell. To change the .NET Framework version, I created a configuration file with the same name as the application, in the same folder.
E.g. if your application is „my-app.exe“, your configuration file has to be „my-app.exe.config“. I use the following content of the file:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
I.e. you have to tell the supported runtime.
This is sometimes not enough, though. In my scenario, I had the application compiled as „Any CPU“ and configured for V2.0.50727 and v4.0 but still the above Windows message appeared.
My mistake was that on the test system, I only had a 32 bit V2.0.50727, not 64-bit, although the Windows itself was 64-bit. (I don’t know whether a 64-bit version of the .NET Framework exists at all)
So to solve this, I re-compiled the application to „x86“ and then, everything worked perfectly.
(Please correct me if any of my technical assumptions above are wrong)
Es gibt das tolle Programm TreeSize Free, das leider erst gegen Geld auch auf Netzwerk-Laufwerken arbeiten kann.
Ich hatte mir da mal eine Version gekauft, jetzt kann die nur einmal installiert werden.
Stattdessen könnt Ihr auch das Tool RidNacs verwenden, das kann zwar ggf. weniger als TreeSize Free, mir reicht das jedoch völlig aus, und es kann auch auf Netzwerk-Laufwerke bzw. UNC-Freigaben arbeiten.
Schon des Öfteren wäre es mir ein Anliegen gewesen, zwei oder mehr Excel-Dokumente nebeneinander in zwei getrennten Hauptfenstern (z.B. auf zwei Monitoren) anzuzeigen.
Obwohl ich Excel 2010 besitze, habe ich keine Option gefunden. (In Excel 2013 scheint das der Standard zu sein)
Es gibt zwar Zusatztools und -Programme, doch an die erinnere ich mich selbst nach der Installation nach kurzer Zeit nicht mehr.
Stattdessen ist die für mich einfachste Lösung schlicht mehrere Instanzen von Excel zu starten (einfach im Startmenü mehrfach das Excel-Symbol anklicken oder Start > Ausführen > „excel“) und dann jeweils in einer Instanz explizit ein Dokument laden.