小编Sve*_*man的帖子

在Visual Studio 2017 15.8.1中使用MSTest v1运行测试的指南

我上周升级到Visual Studio 2017.使用MSTest v1的几个测试项目的解决方案起初看起来很好.大多数测试项目都执行测试.这是.NET Framework,而不是.NET Core.

但是,有一个项目我遇到了问题.这是一个集成测试项目,意味着它使用ChromeDriver和Selenium运行Web应用程序测试.该项目引用了NUnit,尽管该引用来自另一个项目引用.我实际上并没有使用NUnit作为我的测试框架.

尝试在该特定测试项目中运行任何测试时,这是错误: Could not find test executor with URI 'executor://mstestadapter/v1'. Make sure that the test executor is installed and supports .net runtime version . Test project {name} does not reference any .NET NuGet adapter. Test discovery or execution might not work for this project. It's recommended to reference NuGet test adapters in each test project in the solution.

禁用下面显示的选项使一切正常: Visual Studio 2017选项的屏幕截图,测试设置.

浏览https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-preview-relnotes#--visual-studio-2017-version-158-preview-4上的预览发行说明后,我找到了这个解决方案.(向下滚动到"......新功能......"然后再转到.NET Test Adapter Extension).它提到了这个突破性的变化(虽然它没有打破我的其他项目),但没有提到实际做什么来解决问题.

当然,长期来看,保持这种选择不受限制似乎不可行.所以我正在寻找如何进行的指导.

我已经试着看看我是否可以"快速"升级到MSTest v2,但是因为找不到System.Runtime 4.1.2而出现了问题.我尝试通过NuGet添加System.Runtime 4.3.0,但这并没有解决问题.

mstest visual-studio-2017

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

您是否可以从AuthorizeAttribute返回HTTP响应而不抛出异常?

我在各种控制器上使用AuthorizeAttribute,可能需要根据请求本身的某些属性返回403或429(请求太多).我完全在一个自定义的OnAuthorization实现中实现它,然后在必要时抛出一个带有相应响应代码的新HttpResponseException.在我的机器上工作得很好......

在规模上(每分钟数千个请求),这个实现很糟糕,它崩溃了网站.将相同的逻辑移动到控制器操作本身并且仅返回适当的HttpResponseMessage就perf而言工作得非常好,因此在OnAuthorization中抛出异常的费用似乎是perf问题的根本原因.

我喜欢在我可以用来装饰多个控制器和动作的属性中实现它的想法,我强烈不喜欢将少量逻辑移动到控制器动作中,然后重复多次.是否可以从注释返回适当的HTTP状态而不抛出异常?即使它不是从AuthorizeAttribute继承,以这种方式装饰代码也会更好.

编辑:这是Web API 2,而不是MVC

c# http asp.net-web-api

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

使用ITuple生成假货时出错

我们在我们的解决方案中长期使用Microsoft Fakes框架在测试期间伪造System.DateTime.UtcNow.

最近,虽然几个星期前,我们开始使用C#7功能(使用VS 2017),包括元组作为函数的返回值.现在,我为一个版本创建了一个新的分支.在新分支中,生成假货失败,下面有多条消息

4>C:\Users\...\Source\... 2017\DEV\WebApp.UnitTests\f.cs(116674,53): error CS0234: The type or namespace name 'ITuple' does not exist in the namespace 'System.Runtime.CompilerServices' (are you missing an assembly reference?) [C:\Users\...\Source\... 2017\DEV\WebApp.UnitTests\obj\Debug\Fakes\m\f.csproj] 4>C:\Users\...\Source\... 2017\DEV\WebApp.UnitTests\f.cs(116674,13): error CS0538: 'ITuple' in explicit interface declaration is not an interface [C:\Users\...\Source\... 2017\DEV\WebApp.UnitTests\obj\Debug\Fakes\m\f.csproj]

我试过这个:

  • 将Microsoft.Net.Compilers 2.4.0 NuGet添加到所有项目中
  • 将所有项目升级到目标.NET 4.7(从4.6.1开始),并删除所有System.ValueTuple引用(看作现在内置于.NET 4.7的引用)

我不知道还有什么可以尝试的.当我们第一次开始使用元组并添加了System.ValueTuple NuGet包时,我们没有遇到这个问题.我们在创建新分支时只注意到了这个问题.我想假设FakesAssemblies的构建或NuGet包的恢复必须触发一些东西.

从那时起,我们也发现当我们重建解决方案时会发生这种情况.

编辑:我也尝试删除所有Fakes程序集,引用和配置并重新开始.结果相同.

.net microsoft-fakes

9
推荐指数
2
解决办法
4125
查看次数

ASP.NET MVC 5,Knockout.js和映射:正确的方法?

关于ASP.NET MVC,Knockout.js和映射插件的问题比比皆是.我有以下(非常简单的"入门")示例,它有效.但是,我想反馈一下这是否是推荐的方法.首先,我感兴趣的是未来的模型明显更复杂(儿童,下拉等).我觉得维护两套模型是不合理的,因此我希望使用映射插件.

PS:我不介意提交表单,但由于所有不同的问题,我无法让它工作,显然与ko.utils.postJSON引用的字符串值的URL编码有关.任何更新也将受到赞赏.

HTML

<h2>Simple View</h2>
<p>A simple model with 2 properties</p>
<p>Model property "Name": <span data-bind="text: Name"></span></p>
<p>Model property "Count" (just some integer): <span data-bind="text: Count"></span></p>
<form data-bind="submit: save">
    <h3>Editing</h3>
    <p>Name: <input type="text" data-bind="value: Name" /></p>
    <p>Count: <input type="text" data-bind="value: Count" /></p>
    <h3>Posting Back</h3>
    <button type="submit">Update</button>
</form>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

<script type="text/javascript">
    var KoViewModel;
    $(function () {
        KoViewModel = ko.mapping.fromJSON('@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))');
        ko.applyBindings(KoViewModel);
    });
    var save = function () {
        $.ajax({
            url: location.href,
            type: 'POST',
            data: ko.mapping.toJSON(KoViewModel),
            contentType: 'application/json; charset=utf-8',
            success: function (data) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc knockout.js

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

由于数据分类声明,Azure DevOps DACPAC 部署失败

我使用数据分类敏感度标签对 Azure SQL 数据库中的一些列进行了分类。在数据库对应的SSDT项目中,存在如下SQL语句:

ADD SENSITIVITY CLASSIFICATION TO
    [dbo].[tablename].[UserName]
    WITH (LABEL = 'Confidential', LABEL_ID = 'guid1'
        , INFORMATION_TYPE = 'Credentials', INFORMATION_TYPE_ID = 'guid2');
Run Code Online (Sandbox Code Playgroud)

SSDT 项目在 VS 2019 以及 Azure DevOps 构建管道中的构建任务中构建良好。正如预期的那样,我不得不使用 VS 2019(托管)代理,因为以前版本的 SSDT 无法识别该 SQL 语法。

在管道中,该项目的 DACPAC 已成功构建。然后我尝试使用 Azure SQL 数据库部署任务部署该 DACPAC。它使用在托管代理上的 C:\Program Files\Microsoft SQL Server\150\DAC\bin\ 中找到的 SqlPackage.exe 版本。它显然无法识别这些 SQL 语句并且失败并出现以下错误:

元素或注释类 SqlSimpleColumn 不包含属性类 SensitivityLabel。

有没有办法将更新的 SqlPackage.exe 部署到托管构建代理,还是我一直在等待 Microsoft 更新映像?有没有办法将参数传递给 SqlPackage.exe 指示它忽略这些语句?

azure-sql-database azure-devops azure-pipelines

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