在FxCop 10之后,Microsoft停止为FxCop发布单独的安装程序.在安装Visual Studio 2013/2015/2017之后,官方目前只能运行代码分析(FxCop 12.0/14.0/15.0).但是,我们坚持不在构建代理上安装Visual Studio(安装需要保留在 - 与我们在开发者计算机上获得的内容同步等).
那么我将如何让FxCop 12.0/14.0/15.0在构建代理上工作,最好不要安装其他任何东西?不过,我会接受为源代码控制添加一些二进制文件和msbuild文件.否则:有没有办法只使用Visual Studio 2013/2015/2017安装程序安装FxCop的东西?
注意:我们使用Teamcity作为构建服务器.
由于特定环境和FxCop版本有多个有效答案,我可以自由地将它们链接到此处以便于访问:
介绍
我正在寻找一个扩展点"在VS加载项目时执行".这也应该可以合并到VS外部的构建运行中.这意味着它应该以msbuild脚本结束.
MSBuild InitialTargets
我现在已经发现的MSBuild提供了在任何其他执行执行目标的扩展点:<Project InitialTargets="..."/>
.这非常适合我对控制台/构建服务器构建的需求.但是,对于Visual Studio,我更喜欢在VS加载解决方案时也会(另外)发生.所以我检查了是否是这种情况:是和否.当我将以下项目导入我*.csproj
的:
<Target Name="TestOnStart">
<Warning Text="Hey $(MSBuildProjectName) is being initialised"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
在VS中加载解决方案后,会弹出一些项目的警告,但不是全部.
问题
InitialTargets
在每次加载时执行?或者也许你可以帮助我回答这个问题,让我自己找到一个解决方案;-):
InitialTargets
在加载项目时执行?
谢谢 :)
附录:
我刚刚注意到,如果我从csproj
外部更改解决方案的项目文件之一,VS会问我是否要重新加载项目.如果我选择"重新加载所有项目",它将执行InitialTargets
所有项目.因此,这可能需要使用缓存等.因此,我的问题的解决方案可能涉及让VS相信项目中的某些内容发生了变化(在加载解决方案之前/之前).
我有以下代码,我想测试:
private Task _keepAliveTask; // get's assigned by object initializer
public async Task EndSession()
{
_cancellationTokenSource.Cancel(); // cancels the _keepAliveTask
await _logOutCommand.LogOutIfPossible();
await _keepAliveTask;
}
Run Code Online (Sandbox Code Playgroud)
重要的是,EndSession
只有`_keepAliveTask'结束后,Task才会结束.但是,我很难找到一种方法来可靠地测试它.
问题:我如何对EndSession
方法进行单元测试并验证等待Task
返回的方法.EndSession
_keepAliveTask
出于演示目的,单元测试可能如下所示:
public async Task EndSession_MustWaitForKeepAliveTaskToEnd()
{
var keepAliveTask = new Mock<Task>();
// for simplicity sake i slightly differ from the other examples
// by passing the task as method parameter
await EndSession(keepAliveTask);
keepAliveTask.VerifyAwaited(); // this is what i want to achieve
}
Run Code Online (Sandbox Code Playgroud)
进一步的标准: - …
(这个问题最初是在Ninject Google Group中提出的,但我现在看到Stackoverflow似乎更活跃了.)
我正在使用NamedScopeExtension将相同的ViewModel注入到View和Presenter中.发布View后,内存分析显示Ninject缓存仍保留ViewModel.如何让Ninject发布ViewModel?表单关闭和处置时释放所有ViewModel,但我使用表单中的Factory创建和删除控件,并希望将ViewModel垃圾收集到(收集Presenter和View).
有关问题的说明,请参阅以下UnitTest,使用dotMemoryUnit:
using System;
using FluentAssertions;
using JetBrains.dotMemoryUnit;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Ninject;
using Ninject.Extensions.DependencyCreation;
using Ninject.Extensions.NamedScope;
namespace UnitTestProject
{
[TestClass]
[DotMemoryUnit(FailIfRunWithoutSupport = false)]
public class UnitTest1
{
[TestMethod]
public void TestMethod()
{
// Call in sub method so no local variables are left for the memory profiling
SubMethod();
// Assert
dotMemory.Check(m =>
{
m.GetObjects(w => w.Type.Is<ViewModel>()).ObjectsCount.Should().Be(0);
});
}
private static void SubMethod()
{
// Arrange
var kernel = new StandardKernel();
string namedScope = "namedScope";
kernel.Bind<View>().ToSelf()
.DefinesNamedScope(namedScope);
kernel.DefineDependency<View, …
Run Code Online (Sandbox Code Playgroud) 是Unity 8MB制作的Android应用的最小APK大小吗?我正在构建一个空项目,但仍然获得8MB.有没有办法减少APK的大小?
这是代码
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class csharpfile:MonoBehaviour{
public void LoadJson()
{
using (StreamReader r = new StreamReader("file.json"))
{
string json = r.ReadToEnd();
List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
}
}
public class Item
{
public int millis;
public string stamp;
public DateTime datetime;
public string light;
public float temp;
public float vcc;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想解析文件内容(file.json)
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
Run Code Online (Sandbox Code Playgroud)
文件解析后我将如何在屏幕上打印内容以及如何写入文件 .do help …
c# ×3
.net ×2
msbuild ×2
android ×1
apk ×1
async-await ×1
build-server ×1
fxcop ×1
json ×1
jsonobject ×1
ninject ×1
unit-testing ×1