通过System.ValueTuple类型反映TupleExtensions时无法加载文件或程序集System.Core 2.0.5.0

时间:2018-05-31 21:02:22

标签: c# reflection

根据程序集的加载方式,以下代码可能会抛出异常“无法加载文件或程序集System.Core 2.0.5.0”

public function actionDelete() {
    if (isset($_POST['id'])) {
        $id = $_POST['id'];
        $model = \app\models\UserPreferences::find()->where(['user_id' => Yii::$app->user->identity->user_id])->one();
        $blockvalues = json_decode($model->others);
        foreach ($blockvalues->dashboard_layout as $key => $value) {
            if ($value == $id) {
                unset($blockvalues->dashboard_layout[$key]);

                //save the new updated dashbooard_layouts values
                $model->others=json_encode($blockvalues);
                $model->save();

                echo \yii\helpers\Json::encode([
                    'status' => true,
                ]);
            }
        }



    } else {
        echo \yii\helpers\Json::encode([
            'status' => false,
            'id'=>$id
        ]);
    }
}

Load或LoadFile导致异常

foreach (var type in valueTupleAssembly.GetTypes())
{
    var attributes = type.GetCustomAttributes(typeof(string), false);
}

LoadFrom工作正常

var valueTupleAssembly = Assembly.LoadFile(path);
var valueTupleAssembly = Assembly.Load(File.ReadAllBytes(path));

我知道System.ValueTuple是可重定向的,它对System.Core的依赖应解析为正在执行的任何内容。

我不明白(1)为什么反映TupleExtensions触发System.Core 2.0.5的组装解析(同一组件中的其他类型没有)和(2)为什么LoadFrom没有相同的问题。

https://blogs.msdn.microsoft.com/suzcook/2003/09/19/loadfile-vs-loadfrom/状态“LoadFrom()经过Fusion,可以重定向到另一个不同路径的程序集,但如果已经在LoadFrom上下文中加载了相同的身份。”所以我对(2)的猜测是Fusion将system.core 2.0.5重定向到可用的版本?

0 个答案:

没有答案