我正在整理一堆新的单元测试,作为CI工作一起运行.我使用vstest.console.exe而不是mstest.exe主要是因为它能够从几个框架运行测试,但现在焦点是几个xUnit dll.这些作业是作为Jenkins管道的一部分运行的.
我已经在几个开发盒上成功测试了所有内容,但到目前为止,烦人的测试发现在任何CI构建盒上都没有.这是在添加0.99.8 xUnit测试适配器vsix(也用0.99.7测试)之后.xUnit dll是使用2.0.0.2378 beta nuget版本的xUnit构建的.
我用最简单的dll复制了这些症状,使用一种公共测试方法,在我自己的盒子上工作正常,不在任何构建盒上工作.在Windows 2012上,部署环境非常简单,VS2012安装和xUnit测试适配器.
我通过vstest exe配置文件启用了TpTrace日志记录,一切看起来都很好.我想我正在寻找一种方法来进一步解决问题(可能是跟踪xUnit发现过程)或解决问题.我更喜欢保留使用vstest控制台以简化运行几个框架.
我也通过xUnit codeplex网站写了这个问题.
我已经查看了这篇SO帖子,但没有一个建议的解决方案在这里有意义.
由于存在用于访问F#中的SQL数据的类型提供程序,因此没有太多关注ORM(微观或其他)的使用.我完全可以看到这背后的逻辑.
似乎许多使用F#来播放关系数据的例子是将它们插入到现有的大型数据库中,这些数据库似乎是在其他地方创建的.
感觉这里有一点差距:有没有一种很好的方法可以直接从F#管理模式创建和迁移?链接到上面的示例建议您将手动模式创建脚本作为第一步运行.这是唯一的选择吗?
我最近从一开始就开始了一个F#的小项目,我正在考虑将一些数据存储在关系数据库中(现在是sqlite).我没有要探索的现有架构,我正在从头开始设计.在F#中管理我的架构(创建然后迁移)是否有更友好或更惯用的方式?
我正在尝试一些可能的技术,用于在运行时生成C#接口的动态代理.到目前为止,我发现Roslyn在没有太多摩擦的情况下带我走了一段路,但我对处理泛型类型有点困惑.特别是,要解析类型名称.
我的基本工作流程是:
CompilationUnitSyntax
MethodInfo
构建一个MethodDeclarationSyntax
using SyntaxFactory.MethodDeclaration
,目标是我的新动态类这是我困惑的问题的一个例子.在这一点上,似乎我需要解析一个字符串来获得一个TypeSyntax
(在这种情况下为返回类型),并且我唯一可以接受它的地方是methodInfo.ReturnType.Name
:
var methodDecl = SyntaxFactory.MethodDeclaration(SyntaxFactory.ParseTypeName(methodInfo.ReturnType.Name), methodInfo.Name);
例如,问题是SyntaxFactory.ParseTypeName
期望'有效'的C#语法类型声明List<string>
,但访问Name或FullName属性的形式如下:
{Name = "List`1" FullName =
"System.Collections.Generic.List`1[[UnitTests.SamplePoco, UnitTests,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"} System.Type
{System.RuntimeType}
Run Code Online (Sandbox Code Playgroud)
这显然不会用反引号解析,缺少尖括号等.
Reflection样式类(MethodInfo,Types)和Roslyn语法单元之间是否有更好的桥梁?我也尝试了一种纯粹的反射发射方式解决方案,但是想知道我是否可以在这里找到一个基于Roslyn的方法.
我正在使用T4实现一些相当直接的代码生成,但是当涉及到属性生成的细节时,我仍然遇到了一个基本问题.当我访问我想要生成的CodeProperty对象的Type属性时,它们返回'System .__ ComObject'而不是属性的实际类型.
我正在使用EnvDTE查找项目中包含我的自定义属性的所有类.我用它来标记某些代码生成类.到现在为止还挺好.然后我踩过我班级的所有CodeElement对象.我可以找到所有属性,只是我无法得到它们的"类型".
这是我T4的片段:
public class <#= cls.Name #>_DTO
{
<#
foreach (CodeElement child in cls.Children)
{
if (child.Kind == vsCMElement.vsCMElementProperty)
{
var prop = child as CodeProperty;
#>
public <#= prop.Type.ToString() + " " + child.Name #> { get; set; }
<#
}
}
}
#>
Run Code Online (Sandbox Code Playgroud)
输出的样本是:
public class TestResult_DTO
{
public System.__ComObject TestType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我接近有效输出,它只是我正在努力访问的属性的类型.
我正在使用小型C#控制台应用程序中的Microsoft.Build.Evaluation工具对csproj文件进行一些内省和分析.我想找到参考项目的实际位置,使用与MSBuild本身相同的启发式,即此处描述的位置.我对构建工件的自动转换成包,类似的标题什么在JetBrains的博客中概述这里
我能找到的唯一例子是HintPath是正确的,例如这个项目,我知道有些HintPaths当前不正确,我不想信任它们.这个项目非常接近我正在尝试做的事情,增加的复杂性是我想使用真正的解析行为来查找依赖项.
我有一个我的csproj的Microsoft.Build.Evaluation.Project对象的实例,我看不到任何可用的方法可以为我提供分辨率.我认为我希望的是一个用于Reference或ProjectItem的神奇的Resolve()方法,有点像这个方法.
我可以通过将我自己的搜索约束到这个构建系统使用的一组有限输出路径来找到替代方案,但是如果可以的话我想挂钩到MSBuild.
我正在尝试按照如何调用相同的 msbuild 目标两次?中概述的基本模型在 msbuild 中创建可重用的目标。
我试图传递一个我想解释为列表的属性。我在网上没有找到处理这种情况的例子。据我了解,问题在于 Properties 已经被视为列表项,因此它不喜欢传入列表项。有没有办法让 msbuild 在这里正确打包和解包列表?
Msbuild 抱怨:
error MSB4012: The expression "FilesToZip=@(Scripts)" cannot be used in this context. Item lists cannot be concatenated with other strings where an item list is expected. Use a semicolon to separate multiple item lists.
Run Code Online (Sandbox Code Playgroud)
这是一个调用者示例:
<Target Name="BuildMigrationZip">
<MSBuild Projects="BuildZip.msbuild"
Targets="BuildZip"
Properties="FilesToZip=@(Scripts);OutputZipFile=$(MigrationPackageFilePath);OutputFolder=$(MigrationPackagePath);Flatten=true"/>
<Message Text="Created database migration zip: $(MigrationPackageFilePath)" Importance="high"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
和基本目标:
<Target Name="BuildZip">
<MakeDir Directories="$(OutputFolder)"/>
<Zip Files="@(FilesToZip)"
ZipFileName="$(OutputZipFile)"
Flatten="$(Flatten)"
ParallelCompression="false" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我基本上正要回去剪切和粘贴这些内容,尽管我想在这里打包一些拉链。
更新:同样的问题适用于在可重用目标上设置输入。到目前为止,我的问题解决了原始功能,但保持依赖关系正常工作会很好。例如:
<Target Name="BuildZip"
Inputs="@(FilesToZip)"
Outputs="$(OutputZipFile)"> …
Run Code Online (Sandbox Code Playgroud) c# ×3
msbuild ×2
envdte ×1
f# ×1
msbuild-task ×1
orm ×1
reflection ×1
roslyn ×1
sqlite ×1
unit-testing ×1
vstest ×1
xunit.net ×1