小编And*_*ray的帖子

在单元测试中调试 System.IO.FileLoadException

对于我正在现代化的项目,我有一套由应用程序的原始开发人员提供的单元测试。在我的现代化改造早期,它们是完全绿色运行的。然而,它们已经变成红色,但大多数情况下都有相同的例外:

例外:

System.IO.FileLoadException: Could not load file or assembly 'MyApp.BusinessLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.  Access is denied.

at MyApp.SomeExecutable.SomeClass.SomeMethod(args)
at MyApp.UnitTests.SomeExecutableFixture.CanValidateSomething() in [place of invocation of SomeClass.SomeMethod]
Run Code Online (Sandbox Code Playgroud)

异常没有内部异常。

从我所看到的,这发生在任何引用MyApp.BusinessLayer程序集中定义的东西的方法中,友好的错误消息通知我无法加载......显然是由于拒绝访问。

我尝试了以下方法来访问程序集:

  1. 在 Windows 资源管理器中导航到程序集,并授予自己完全访问权限。没有效果。
  2. 导航到 Windows 资源管理器中的包含文件夹并授予我完全访问权限。还是没有效果。
  3. 以管理员身份运行 VS 2015,并重新运行单元测试。没有效果。
  4. 我认为情况很疯狂,所以我检查了 VS 项目中的引用,但它们都指向我应该测试的程序集(它与 UnitTest 程序集位于同一文件夹中。)不可能是这样.
  5. 尝试运行fuslogvw.exe,并在运行时运行测试以了解绑定过程。没有信息出现;就好像在 Visual Studio 2015 中运行测试对 Fusion Log Viewer 完全不可见!即使在重新启动后,Fusion Log Viewer 也没有关于正在发生的程序集绑定的信息。(感谢@AndrewAu、@CodeCaster)
  6. 在建议使用进程监视器实用程序后,发现发生了一些模拟。我授予了 SomeDomain\SomeUser 对被测文件夹的权限;没有效果。(感谢@DarinDimitrov)
  7. 回顾基础知识,确保所有被测程序集都是相同的 .NET 版本 - 特别是 .NET 4.6。他们是; 那不可能(感谢@Kamo)
  8. 与同事商量后,我想起我们刚刚换了笔记本电脑。我尝试在我的旧笔记本电脑上加载代码,它以前在那里工作过。在那里仍然不起作用。
  9. 虽然不是最佳实践,但出于绝望,一位同事建议直接引用业务层 DLL,而不是通过业务层的 C# 项目。这也没有影响(不过,我恢复了项目参考。) …

c# unit-testing assembly-resolution

5
推荐指数
0
解决办法
1347
查看次数

优雅地在多个选择器上执行相同的操作?

在我正在研究的项目上,我一直在编写一个JavaScript对象.其中一个行为涉及删除一系列类中的任何子项,如下:

function Foo () {
    var $a = $('.a'),
        $b = $('.b'),
        // ...etc...
        $n = $('.n');

    $a.remove();
    $b.remove();
    // ...etc again...
    $n.remove();
}
Run Code Online (Sandbox Code Playgroud)

虽然有一些方法可以修改它以便更容易维护(将选择器放入单个数组弹簧中立刻想到),我想知道是否有任何优雅的方法.remove()在一系列选择器上执行操作,如下:

function FooPrime() {
    var selectors = [
        '.a',
        '.b',
        // ...
        '.n'
    ];

    // Perform remove on all given selectors?
    $(selectors).remove();
}
Run Code Online (Sandbox Code Playgroud)

因此,问题:我可以通过多种方式在多个选择器上执行单个jQuery操作?

编辑:是一个JSFiddle来显示问题上下文的简化版本.

javascript jquery jquery-selectors

4
推荐指数
1
解决办法
110
查看次数

尝试打开在IE11中为程序生成的PDF生成的URL时,"访问被拒绝"

对于我正在处理的应用程序,我们有一个功能,我们在服务器端为对象生成报告,并在客户端的新选项卡(暂时)中打开它.

我正在使用该URL.createObjectURL函数为a创建一个URL Blob,该URL 由AJAX调用的结果组成.$window.open(generatedFileUrl)但是,无论何时进行调用,我都会收到JavaScript错误.

控制器:

(function() {
    angular.module('app').controller('someCtrl', [
        '$window', 'someSvc', controller
    ]);

    function controller($window, someSvc) {
        var vm = this;
        vm.thing = {};  // How we get the object is unimportant for this question.
        vm.printThing = printThing;

        function printThing() {
            someSvc.printThing(vm.thing.id, vm.someFlag)
                .then(function(result) {
                    var file = new Blob([result], {type: 'application/pdf'});
                    var fileURL = URL.createObjectURL(file);

                    $window.open(fileURL);
                });
        }
    }
)();
Run Code Online (Sandbox Code Playgroud)

服务:

(function () {
    angular.module('app').factory('someSvc', [
        '$http', someSvc
    ]);

    function someSvc($http) {
        var service …
Run Code Online (Sandbox Code Playgroud)

javascript pdf-generation angularjs

3
推荐指数
1
解决办法
1694
查看次数

IEnumerable.Any(Func)何时返回值?

我最近在我使用的代码库中看到了一些代码,ReSharper提供了重构代码collection.Any(Func< bool >).

我想知道这对性能的影响.假设我有一个看起来像这样的电话:

bool hasEvenValue = collection.Any(i => (i % 2) == 0);

......以及看起来像这样的数据......

{ 1, 2, 3, 5, 3, 5, 1, 3, 5, 2 }

Enumerable.Any()何时返回值?在这种情况下,第二个数据元素,还是会在返回true之前处理每个元素

c# linq performance ienumerable lambda

2
推荐指数
1
解决办法
1793
查看次数

Angular 1.5组件中的'&'

对于我正在研究的项目,我们重构了一些重复的视图并将代码编写到Angular 1.5组件中.

这些组件专门打开一个Angular UI模式,当模态关闭时,应该在最上面的范围内执行一些回调.我们遇到的问题是,当我们关闭模态时,我们设置为回调的函数不会被调用.

我确保参考Angular 1.5 Documentation for Components,但关于'&'分类器如何工作的部分特别含糊.我引用:

输出通过&bindings实现,这些绑定用作组件事件的回调.

我发现这篇文章旁边没用了; 因此,在这种情况下,我不知道我正确使用'&'绑定分类器.这是我发生的事情:

MainFeature.html

<div ng-repeat="thing in vm.things">
    <sub-feature onSave="vm.onSave()" thing="thing"></sub-feature>
</div>
Run Code Online (Sandbox Code Playgroud)

MainFeatureCtrl.js

(function () {
    'use strict';

    angular.module('app').controller('mainFeatureCtrl', [
        mainFeatureCtrl
    ]);

    function mainFeatureCtrl() {
        var vm = this;

        vm.onSave = function () {
            // Save stuff
            console.log('I should see this but do not.');
        };
    }
})();
Run Code Online (Sandbox Code Playgroud)

SubFeatureCmpt.js

(function () {
    'use strict';

    angular.module('app').component('subFeature', {
        templateUrl: 'App/MainFeature/SubFeature/SubFeature.html',
        controller: 'subFeatureCtrl',
        controllerAs: 'vm',
        bindings: {
            thing: '=',
            onSave: '&'  // Point …
Run Code Online (Sandbox Code Playgroud)

javascript components angularjs

2
推荐指数
1
解决办法
3789
查看次数

jQuery点击事件可以解除绑定还是重置?

我在我正在处理的网页上发现了资源泄漏.

此网页有两个文本字段,在单击时显示模式对话框,对后端执行数据请求,然后在表中显示该信息,用户可以从中选择一个条目,以便在最初单击的文本框中使用.

我将点击事件绑定到文本框,如下所示:

var $field = $('#one-of-the-text-fields');

$field.click(function () {
        App.DialogClass.show();
        App.DialogClass.PopulateTable();
        App.DialogClass.GotoPageButtonAction(actionArgs);  // Offender!
});
Run Code Online (Sandbox Code Playgroud)

...哪个电话......

App.DialogClass = (function($) {

var pub {},
    $gotoPage = $('#pageNumberNavigationField'),
    $gotoPageButton = $('#pageNumberNavigationButton');

// ...SNIP unimportant other details...

pub.GotoPageButtonAction = function (args) {
    $gotoPageButton.click(function () {
        var pageNumber = $gotoPage.val();
        pub.PopulateTable(args);   // Breakpoint inserted here...
    });
};

return pub;

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我注意到泄漏,因为当我使用Chrome的JavaScript调试器时,每次点击不同的按钮时,我总是会有一个额外的断点(例如,我第一次点击字段A时,断点被击中两次.当我击中字段时此后B,断点被击中三次.如果我点击后认为,断点命中四次.必要时外推.)

我的代码中没有任何地方可以处理给定字段的现有点击事件.我怀疑我的泄漏是因为事件没有得到清理.话虽这么说,我对JavaScript/jQuery也不是很熟悉.从控件中删除单击事件有哪些技巧?

javascript jquery html5 memory-leaks

1
推荐指数
1
解决办法
5501
查看次数

jQuery .css()不影响div

对于我正在处理的应用程序,我最近实现了一个吸收用户输入的叠加层.当然,这只是我的目标之一 - 我还需要将生活在'内部'的popover居中.

这是我到目前为止的设置:

标记

<!-- snip extra HTML -->

<div id='some-overlay' class='input-eater hidden'>
  <div id='some-prompt' class='overlay dialogue'>
    This is a message that should be hidden.<br /><br />
    <a href='javascript: $('#some-overlay').fadeOut();'>Click Here To Close</a>
  </div>
</div>

<!-- ...SNIP... -->
Run Code Online (Sandbox Code Playgroud)

...后台页面上的某些操作会导致#some-overlay淡入,从而遮挡页面直到关闭操作发生.这是违规的JavaScript:

<!-- ...Continued from the markup above... -->
<script>
var $button = $('.some-element'),
    $overlay = $('#some-overlay'),
    $prompt = $('#some-prompt');

$(document).ready(function () {
  $button.click(function(e) {
    e.preventDefault();

    var args = {
      // ...snip.  Unnecessary.
    };

    $.get('Home/SomeAction', args, function(result) {
      // Some …
Run Code Online (Sandbox Code Playgroud)

jquery html5 css3

1
推荐指数
1
解决办法
266
查看次数

HRESULT 0x8007006E 将 DLL 包含到项目“lib”文件夹中

对于我正在进行的项目,我的团队使用 ActiveReports 在服务器上生成报告。我们生成了允许报告功能工作的许可证 DLL。

在我们的 VS2012 解决方案中,我们包含了一个 /lib/ 目录,该目录包含某些外部 DLL,例如 ActiveReports 程序集和此许可证 DLL。

但是,在尝试将 DLL 添加到项目时,我们会收到两个错误,连续出现。我尝试使用以下步骤添加现存的 DLL:

  1. 在 VS 2012 中,右键单击我们的 /lib/ 文件夹,然后单击“添加现有项目...”
  2. 浏览到许可证 DLL 所在的 Windows 目录并选择它,单击打开。

但是,在这样做时,我会收到两个背靠背的错误:

  1. 无法打开文件
  2. 系统无法打开指定的设备或文件。(来自 HRESULT 的异常:0x8007006E)

我已经检查了我的本地操作系统权限,以确保 DLL 所在的文件夹是可访问的,并且 VS 2012 中出现的对象的路径指向正确的位置。 问题:是什么导致了这个错误?当然,我错过了一些东西......

visual-studio-2012

1
推荐指数
1
解决办法
1938
查看次数

如何在可观察管道序列中使用材质对话框

对于我从 AngularJS 重写的应用程序,我有一系列操作:

1) I got to the server to get a message  
2) I display the returned message in a generic dialog, with a Yes and No button.  

3-Yes) I go to the server to do something, proceed to 4  
3-No) I terminate the sequence  

4) Notfiy the user that the operation is complete.
Run Code Online (Sandbox Code Playgroud)

然而,我在将其转换为 Angular/ReactObservable系统时遇到问题。我想做这样的事情:

// Actual arguments are immaterial in this case...
this.webDataService.get('/api/GetEndUserMessage', args)
  .pipe(
    map((message: string) => {
      const config = new MatDialogConfig();
      config.data …
Run Code Online (Sandbox Code Playgroud)

modal-dialog reactjs angular-material angular

1
推荐指数
1
解决办法
2019
查看次数

SpecFlow/NUnit/Selenium测试从错误的PWD运行

对于我正在开发的新项目,我的团队和我正在尝试使用ReSharper 10,NUnit,SpecFlow和Selenium设置一些功能测试.我们从一个已知的工作项目迁移了一堆旧代码,并使其构建没有问题.

但是,当我们运行代码时,我们不断收到以下错误:

OneTimeSetUp: System.IO.DirectoryNotFoundException : Could not find a part of the path 'C:\Users\Me\AppData\Local\SomeApp\App_Data\SomeApp.db'.

Exception doesn't have a stacktrace
Run Code Online (Sandbox Code Playgroud)

......这不对; 如果它找不到SomeApp.db文件,那应该是失败的C:\MyProjects\SomeApp\SomeApp.Web\App_Data\SomeApp.db!

这种情况下的相关代码在我们的TestSuite.cs类中:

[Binding]
public class TestSuite
{
    private string _currentPath;
    private string _localFile;
    private string _websiteBinPath;
    private string _websiteDataPath;

    // Stuff...

    [BeforeTestRun]
    public static void BeforeTestRun()
    {
        _currentPath = Directory.GetCurrentDirectory() + @"\";
        // Data:
        // <add key="TestWebsiteDataRelativePath" value="..\..\..\SomeApp.Web\App_Data\" />
        // <add key="TestWebsiteBinRelativePath" value="..\..\..\SomeApp.Web\bin\" />
        _websiteBinPath = Path.Combine(_currentPath, ConfigurationManager.AppSettings["TestWebsiteBinRelativePath"]);
        _websiteDataPath = Path.Combine(_currentPath, ConfigurationManager.AppSettings["TestWebsiteDataRelativePath"]);

        //removes the ../../../ …
Run Code Online (Sandbox Code Playgroud)

directory resharper nunit unit-testing

0
推荐指数
1
解决办法
606
查看次数