Type.GetProperties()在Release中不起作用

时间:2016-02-12 10:14:41

标签: c# win-universal-app system.reflection

我正在尝试使用反射来获取C#中FontWeights类的属性。

var properties = typeof(FontWeights).GetProperties();
var dialog = new MessageDialog("Number of weights: " + properties.Length);
await dialog.ShowAsync();

使用 Debug 配置构建时,上面的工作正常。但是,使用发布时,找不到任何属性。

为什么会这样?有办法吗?

这是一个UWP应用程序。

1 个答案:

答案 0 :(得分:8)

  

它是一个UWP应用程序。

在发布版本中,您的应用程序是使用.NET Native编译的。这是故意的,它可以确保您测试应用程序在用户计算机上运行的方式。 .NET Native并不是一帆风顺的,它积极地从最终图像中消除类型以获得尽可能小的二进制文件。这在代码上有尖锐的边缘,通常需要抖动才能正常工作。特别是反射代码会像这段代码一样流血。

您需要帮助并告诉工具链将FontWeights类型包含在最终图像中。打开项目的Properties节点,然后双击Default.rd.xml。添加:

$(document).ready(function(){
    $("button").click(function(){
        var dateTimeInUtc = 'Fri, 12 Feb 2016 12:14:00 GMT';
        var version = '2015-04-05';
        var key = 'JEwMjqFD1ng8vIaECmRw8eQysiIvH08nF/jPKPYaNGumgxtKIjltX8bte5sKN6SNyw09s=='; // not an actuall key
        var stringToSign = 'GET\n\n\nFri, 12 Feb 2016 12:14:00 GMT\n/myaccount/mytable(PartitionKey=\'first_partition\', RowKey=\'1235\')';
        var signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(CryptoJS.enc.Utf8.parse(stringToSign), CryptoJS.enc.Base64.parse(key)));
        $.ajax({
            url:'https://myaccount.table.core.windows.net/mytable(PartitionKey=\'first_partition\', RowKey=\'1235\')',
            type: 'GET',
            success: function (data) {
                console.log('well done');
            },
            beforeSend: function (xhr) {
                xhr.setRequestHeader('Authorization', "SharedKey " + "myaccount" + ":" + signature);
                xhr.setRequestHeader('x-ms-date', dateTimeInUtc);
                xhr.setRequestHeader('x-ms-version', version);
            },
            error: function (rcvData) {
                console.log(rcvData);
            }
        });
    });
});

重建,你现在看到一切都很顺利。