Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有办法防止通过asp.net System.Web.Optimization重命名某些变量_C#_Asp.net_Bundling And Minification - Fatal编程技术网

C# 是否有办法防止通过asp.net System.Web.Optimization重命名某些变量

C# 是否有办法防止通过asp.net System.Web.Optimization重命名某些变量,c#,asp.net,bundling-and-minification,C#,Asp.net,Bundling And Minification,我正在AngularJS项目中使用ASP.Net捆绑和缩小(System.Web.Optimization) 除了一个场景外,一切都非常顺利 此时,我们必须使用一个表达式。我们知道这并不理想,但目前还没有另一种解决方案来满足我们的需求 所以我们有这条线: var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor); 现在,由于缩小更改了变量的名称,因此不存在etcglobalJson,因此此行失败 是否有方法

我正在AngularJS项目中使用ASP.Net捆绑和缩小(
System.Web.Optimization

除了一个场景外,一切都非常顺利

此时,我们必须使用一个表达式。我们知道这并不理想,但目前还没有另一种解决方案来满足我们的需求

所以我们有这条线:

var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor);
现在,由于缩小更改了变量的名称,因此不存在etc
globalJson
,因此此行失败

是否有方法指示ASP.Net缩小以重命名特定变量

更新

根据给出的答案,我们已经开始使用Angulars安全的注射方法

使用此命令的指令如下所示:

    appDirectives.directive('drHasPermissionFor', ['globalJson', function (globalJson) {
        return {
            restrict: 'A',
            link: function (scope, element, attrs) {
                //code .....

                // how can I reference the injected globalJson here - so that i know it's using the
                // newly minified name..
                var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor);

//more code......
            }
        };
    }]);

Angular有这样一种处理缩小的机制。您必须使用称为内联注释的内容

这是通过允许缩小器缩小注释来实现的,然后angular将使用注释来确定缩小后的变量名

因此,您可以只注入您想要使用的变量并使用缩小的变量

这里还有一篇好文章:


好的-一位同事想出了一个解决这个问题的办法

虽然它解决了手头的问题,但它并没有真正回答“你能告诉优化不要使用某些变量吗?”

如果最初的问题得到回答,我将很高兴地更改已接受的答案

目前,这可以像这样进行黑客攻击:

appDirectives.directive('drHasPermissionFor', ['globalJson', function (globalJson) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {

            // this function will return the minified globalJson
            function returnGlobalJson() {
                return globalJson;
            };

            // call this function as part of the eval - works perfectly :)
            var isValid = eval('returnGlobalJson().Permissions.' + attrs.drHasPermissionFor);

        }
    };
}]);

我正在使用BuildBundlerMinifier,使用函数的解决方案不起作用,因为函数也被缩小了

我使用的解决方案是将变量复制到
this
并在eval中使用
this.value
,然后将值复制回变量


仍然是一个解决方法,但可能会帮助其他人…

谢谢。我们已经在使用缩小安全注射。我的问题不是特别清楚-只是更新了:)55k,你只给出链接答案?不好意思。@MikeSmithDev-当我最初发帖时,问题中没有足够的信息来提供一个与他正在做的事情相匹配的例子,所以我所能做的就是提供一般信息让他自己弄清楚。他后来补充了额外的信息,因为他已经在做我建议的事情了,所以没有必要添油加醋。除了“link only”的意思是“link only”之外,我还提供了大量的解释。我也有同样的问题,但解决方案并没有告诉我为什么函数也在缩小。函数名“returnGlobalJson”没有缩小;只有变量和参数。因此,您可以安全地对该名称进行求值。我使用的是bundle、.NET 4.5,而bundle是minificando函数,是否有与minificar不同的参数?