Fix first real VSTO build, add sender account selection, polish deploy

First live build against real Visual Studio/VSTO tooling surfaced two
issues in the hand-written AddIn scaffold: ThisAddIn derived from the
wrong base type (OutlookAddIn is an interface, not the concrete
OutlookAddInBase class), and VSTO Application projects cannot build
without a signed ClickOnce manifest, so SignManifests is now on with a
throwaway self-signed test certificate. Both Core/Core.Tests/AddIn now
build clean and Core.Tests passes.

Also: mail always sent from Outlook's default account with no way to
pick a different one (e.g. a shared mailbox) - added a "From account"
setting (Session.Accounts dropdown in SettingsForm, SendUsingAccount in
MailSender). And added deploy/ with both a local ClickOnce publish
script (real install/uninstall via Windows Apps, no manual registry
editing) and a manual registry sideload fallback for scripted rollouts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
redlineoandClaude Sonnet 5 committed 2026-07-24 09:51:52 +03:00
1 parent 7f0e0fdb23
commit 264ed74095
20 files changed
+756 -67

No files matched your search

@@ -5,10 +5,50 @@ namespace BulkArchiveMailer.AddIn
/// shape Visual Studio normally generates for VSTO projects (hand
/// written here for the same reason as ThisAddIn.Designer.cs - see
/// its header comment).
///
/// <c>Microsoft.Office.Tools.Outlook.OutlookAddIn</c> has no static
/// "GetInstance" helper (it is just the FormRegion-related interface
/// implemented by the real base class, OutlookAddInBase) - the
/// running instance is instead captured directly by
/// ThisAddIn.Initialize() into <see cref="ThisAddIn"/> below, exactly
/// like the real VSTO-generated Globals class does via its
/// <c>Globals.ThisAddIn = this;</c> assignment.
/// </summary>
internal static class Globals
{
internal static ThisAddIn ThisAddIn =>
(ThisAddIn)Microsoft.Office.Tools.Outlook.OutlookAddIn.GetInstance(typeof(ThisAddIn));
private static ThisAddIn _thisAddIn;
private static Microsoft.Office.Tools.Outlook.Factory _factory;
internal static ThisAddIn ThisAddIn
{
get { return _thisAddIn; }
set
{
if (_thisAddIn == null)
{
_thisAddIn = value;
}
else
{
throw new System.NotSupportedException();
}
}
}
internal static Microsoft.Office.Tools.Outlook.Factory Factory
{
get { return _factory; }
set
{
if (_factory == null)
{
_factory = value;
}
else
{
throw new System.NotSupportedException();
}
}
}
}
}