来自可移植类库的GetEntryAssembly(Profile 158)

时间:2013-12-12 22:20:32

标签: c# portable-class-library

我想获取条目程序集的名称,例如myApp.exe。以前在net45中,我会使用Assembly.GetEntryAssembly,但这在Profile 158中不可用。还有其他选择吗? (我可以将Assembly.GetCallingAssembly链接到最后吗?)任何提示都非常感激。

使用GetEntryAssembly,我可以确定应用程序的名称。我在HttpClient调用中使用此名称作为UserAgent,以及使用原始应用程序命名文件和标记反馈。获取应用程序名称的替代方法将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

获取应用程序的名称

你必须处理Store.GetEntryAssembly()在Store和Phone应用程序中不可用这一事实。所以你也无法使用,你的图书馆无法在这样的应用程序中工作。缺少.NET Framework支持可能很难找到解决方法,但这很容易。无论什么应用程序使用您的库,从来没有任何麻烦为您提供此信息。要么是因为它没有使用GetEntryAssembly()的限制,当然,因为它知道它的逻辑名是什么。

因此,只需公开一个属性,让客户端程序员告诉您。只要提供一个非常好的异常消息,他就会立即知道他什么时候忘了。类似的东西:

    public static string ApplicationName {
        get {
            if (_applicationName == null) {
                throw new InvalidOperationException("You *must* assign the ApplicationName property before this library is usable");
            }
            return _applicationName;
        }
        set { _applicationName = value; }
    }
    private static string _applicationName;

请务必在您自己的代码中使用该属性而不是私有字段,以便可靠地引发异常。

现在,Store app程序员将简单地在他的App构造函数中对属性赋值进行硬编码:

    public App()
    {
        this.InitializeComponent();
        this.Suspending += OnSuspending;
        YourPclLibrary.ApplicationName = "MyBeautifulSoup";
        // etc...
    }

允许客户端程序员通过类构造函数传递应用程序名称当然也是一种完全合法(且更可取)的方法。