私のソリューション(多数のプロジェクトを含む)は、Visual Studio 2013で完全に機能します。
Visual Studio 2017では、ソリューションを開いてコンパイルできます。
しかし、デバッグを開始すると、次のエラーメッセージが体系的に表示されます。
セキュリティデバッグオプションは設定されていますが、このデバッグ構成では使用できないVisual Studioホスティングプロセスが必要です。セキュリティデバッグオプションは無効になります。このオプションは、[セキュリティ]プロパティページで再度有効にできます。デバッグセッションはセキュリティデバッグなしで続行します
そして、何も起こりません。何も始まりません。
詳細については、これは複数のスタートアッププロジェクト(WPFプロジェクトを含む)を使用したソリューションです。
編集:[プロジェクト]-> [プロパティ]-> [セキュリティ]タブで[ClickOnceセキュリティ設定を有効にする]オプションを無効にすることで機能します。
それが他の誰かに役立つ場合-私は同じシナリオを持っています-ClickOnceで展開されるクライアントを含む複数のスタートアップソリューション。 [セキュリティ設定]ダイアログを取得した後にクライアントが起動しないという問題を解消するために、スタートアッププロジェクトダイアログのリストの上位に移動しました。クライアントプロジェクトがリスト内のサーバープロジェクトの上にある場合、エラーはなく、すべてがデバッグされます。クライアントプロジェクトがサーバープロジェクトの下にある場合、エラーが表示され、クライアントは開きません。これで問題を完全に解決できるわけではありませんが、私にとっては完全に適切な回避策です。
編集:この回避策を有効にするには、Visual Studioを閉じて再度開く必要がある場合があります。
おそらく、ClickOnceセキュリティ設定でデバッグするために誤ってビットを反転させた可能性があります。アプリのプロジェクトプロパティを取得し、[セキュリティ]タブに移動して、[ClickOnceセキュリティ設定を有効にする]のチェックを外すか、[これは完全信頼アプリケーションです]ラジオボタンをオンにしてください。
MSはVS2017でVSホスティングプロセスを削除しました-参照
このため、プロジェクトユーザーファイルのEnableSecurityDebugging設定をTrueに変更すると、実行時にエラーダイアログが再び表示されるだけです。ダイアログで[OK]をクリックすると、ユーザーファイル設定がFalseに戻ります。
知る限り、回避策はありませんが、MSは非常に頻繁にVSの更新を投稿しているようです(最新は15.3です)一方でClickOnceアプリ。セキュリティデバッグオプションを使用できなくなります。
これは、おそらく構成ファイルの不具合である可能性があります。 [ClickOnceセキュリティ設定を有効にする]はプロジェクト設定で既にマークされていませんでしたが、アプリケーションを起動するたびにこのダイアログが表示されました。この対話を取り除くために、次のことを行いました。
隔離されたストレージにアクセスするときに「呼び出し元のIDを特定できません」というエラーメッセージが表示されることなく、VS2017でClickOnceアプリをデバッグできるようにする回避策があります。この回避策は、ClickOnceセキュリティ設定が必要な状況でも機能するはずです。
プロジェクトのプロパティの[セキュリティ]タブでClickOnceセキュリティ設定を有効にしたときに以前に生成された設定を再作成するには、次の手順を実行します。
1.プロジェクトのプロパティの[セキュリティ]タブで[ClickOnceセキュリティ設定を有効にする]をオフにします。
2. App.Configファイルに次のものを追加します(まだない場合)
<runtime>
<NetFx40_LegacySecurityPolicyenabled="true"/>
</runtime>
3. Microsoft.Build.Tasks.v4.0への参照をプロジェクトに追加します
ClickOnce設定を再作成するコードはどこでも使用できますが、次のサンプルMainメソッドは一般的な考え方を示しています
using System;
using System.Reflection;
using System.Runtime.Hosting;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Windows.Forms;
using Microsoft.Build.Tasks.Deployment.ManifestUtilities;
namespace SecurityDebuggingTest
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args.Length > 0 && args[0] == "startui")
{
Application.Run(new Form1());
}
else
{
PermissionSet permissions = new PermissionSet(PermissionState.Unrestricted);
string AppName = Assembly.GetEntryAssembly().GetName().Name;
string AppExe = $"{AppName}.exe";
string DebugSecurityZoneURL = $"{AppExe}.manifest";
string AppManifestPath = $"{AppName}.application";
string appType = "win32";
AssemblyIdentity ca = AssemblyIdentity.FromManifest(AppManifestPath);
string appIdentitySubString = $"Version={ca.Version}, Culture={ca.Culture}, PublicKeyToken={ca.PublicKeyToken}, ProcessorArchitecture={ca.ProcessorArchitecture}";
string assemblyIdentity = $"http://tempuri.org/{AppManifestPath}#{AppManifestPath}, {appIdentitySubString}/{AppExe}, {appIdentitySubString},Type={appType}";
System.ApplicationIdentity applicationIdentity = new System.ApplicationIdentity(assemblyIdentity);
ApplicationTrust appTrust = new ApplicationTrust();
appTrust.DefaultGrantSet = new PolicyStatement(permissions, PolicyStatementAttribute.Nothing);
appTrust.IsApplicationTrustedToRun = true;
appTrust.ApplicationIdentity = applicationIdentity;
AppDomainSetup adSetup = new AppDomainSetup
{
ApplicationBase = AppDomain.CurrentDomain.BaseDirectory,
ActivationArguments = new ActivationArguments(
ActivationContext.CreatePartialActivationContext(
applicationIdentity,
new string[] { AppManifestPath, DebugSecurityZoneURL })
),
ApplicationTrust = appTrust
};
Evidence e = new Evidence();
e.AddHostEvidence(appTrust);
AppDomain a = AppDomain.CreateDomain("Internet Security Zone AppDomain", e, adSetup, permissions);
a.ExecuteAssembly(AppExe, e, new string[] { "startui" });
}
}
}
}
上記のコードを最初に実行したときにVSホスティングプロセスが利用できないという警告メッセージが表示される場合がありますが、その後、プロジェクトのユーザーファイルのEnableSecurityDebugging設定はFalseに設定され、コードは通常どおり実行されます。
この回避策を支援してくれたMicrosoftのClickOnceチームに感謝します。
私は同じ問題を抱えていました。 32ビットを優先が無効になりました。出力パスを見てみると、bin\Releaseでした。
bin\debugパスを作成し、出力パスをこれに設定しました。解決しました。
このメッセージが表示される理由には、さらに別の原因があります。私の場合、Gitからソリューションのクローンをテストしているときに、Visual Studioがアクティブソリューションプラットフォームを「Any CPU」に設定することに決めたのに対し、私のスタートアッププロジェクトは明示的に「x86」をターゲットにしました。このため、ソリューションのビルドコマンドを実行したときに、スタートアッププロジェクトがビルドされませんでした。
そのプロジェクトのConfiguration Managerの[ビルド]ボックスをチェックすると、エラーメッセージがなくなりました。
誰かが尋ねた場合、そのプロジェクトが明示的にx86をターゲットにしている理由を正確に覚えていません。
私にとっての解決策は、プロジェクトプロパティの[公開]タブで[アプリケーションもオフラインで利用可能]に切り替えることでした。
「アプリケーションはオンラインでのみ利用可能です」