我正在尝试使用反射来获取C#中FontWeights
类的属性。
var properties = typeof(FontWeights).GetProperties();
var dialog = new MessageDialog("Number of weights: " + properties.Length);
await dialog.ShowAsync();
使用 Debug 配置构建时,上面的工作正常。但是,使用发布时,找不到任何属性。
为什么会这样?有办法吗?
这是一个UWP应用程序。
答案 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);
}
});
});
});
重建,你现在看到一切都很顺利。