小编Ric*_*ban的帖子

无法让TeamCity构建F#项目

我正在尝试让我们的构建服务器(TeamCity 8)构建一个F#项目(我们团队中创建的第一个项目).

当我第一次运行构建时,我收到以下错误:

The value "" of the "Project" attribute in element <Import> is invalid. Parameter "path" cannot have zero length.
Run Code Online (Sandbox Code Playgroud)

我认为这意味着构建服务器上不存在必需的F#工具.我尝试使用此博客文章中的说明纠正此问题:http://www.heartysoft.com/ashic/blog/2013/3/build-fsharp-3-on-build-server-without-vs(摘要:下载和安装VWD_FSharp.msi)但问题仍然存在.然后我将Condition ="Exists('$(FSharpTargetsPath)')"添加到fsproj中的Import标记,以便它现在读取:

<Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" />
Run Code Online (Sandbox Code Playgroud)

我在另一篇博客文章中看到过,但所做的就是将早期的错误换成新的错误:

The target "Rebuild" does not exist in the project.
Run Code Online (Sandbox Code Playgroud)

这里的任何帮助将不胜感激; 我真的不想在构建服务器上安装VS. 关于我们环境的唯一可能值得注意的事情是我们使用的是.NET 4而不是4.5.

谢谢

msbuild teamcity continuous-integration f#

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

在可能的情况下自动解决 git 冲突

我们有一个包含 50 多个项目的 .NET 解决方案文件,我们经常遇到这样的情况:两个人将进行相对较小的更改(例如更新 Nuget 包或重命名文件),这会影响所有 50项目文件。

这意味着任何时候合并这些分支时,所有 50 个文件都会发生冲突 - 但是如果您在任何合并工具中打开它们,它将能够自动解决它们。这意味着我在合并中没有实际工作要做,但我必须单击每个文件,等待它在 Beyond Compare 中打开,然后单击保存,然后单击关闭。单击下一个文件,单击保存,单击关闭...重复 55 次。

我的问题是:有什么方法可以让 Git 在遇到冲突文件时尝试使用合并工具自动解决它们?

更新:希望这会增加一些清晰度:我必须一个一个解决每个冲突,但是由于我的合并工具可以自动解决每个冲突,是否有某种批处理操作或合并命令的选项,我可以称呼?

git merge merge-conflict-resolution

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

F#计算表达式和任务并行库

我最近一直在使用F#工作,最近用C#web项目和F#类库编写了一个MVC应用程序,后者包含大部分代码.

我想使用MVC更高版本的异步控制器功能,你可以返回一个Task<ActionResult>.我正在使用F#异步计算表达式编写我的代码,但是不得不经常使用Async.AwaitTask和从Async <'T>转换为Task <'T> StartAsTask.

由于我当时正在学习计算表达式,我想"必须有一种方法可以使用任务和异步的计算表达式来实现更好的F#/ C#interop",所以我有一个去:

type TaskBuilder () =
    member this.ReturnFrom task = task
    member this.Return value = Task.FromResult value
    member this.Bind (task : Task<'a>, continuation: 'a -> Task<'b>) =
        task.ContinueWith(fun (t : _ Task) ->
            (t.Result |> continuation).Result)
    member this.Zero () = Task.FromResult ()
Run Code Online (Sandbox Code Playgroud)

这似乎有效; 运行以下代码:

let task = TaskBuilder()

task {
    let! data = (new WebClient()).DownloadStringTaskAsync(Uri "http://www.google.com")

    printfn "Downloaded from Google: %A" (data.Length)
}
|> ignore

task {
    let! data = …
Run Code Online (Sandbox Code Playgroud)

f# asynchronous computation-expression async-await

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

Git rebase -i什么都不做

git rebase -i没有按照我期望阅读各种在线文档和教程的方式遇到一些麻烦.

我正试图将我的最后四个提交压缩成一个.想象一下dev具有远程origin/dev和提交的分支

A -> B -> C -> D -> E
?                   ? dev
? origin/dev
Run Code Online (Sandbox Code Playgroud)

我想在这里结束:

     ? dev
A -> F
?
? origin/dev
Run Code Online (Sandbox Code Playgroud)

其中F包含来自B,C,D和E的所有变化.所以,鉴于我已经dev检查过,我应该能够运行git rebase -i origin/dev或者git rebase -i HEAD~4然后压缩C,D和E,对吗?

这是我的问题:运行任何一个rebase命令都不会弹出一个git窗口来做任何事情.控制台只返回:

Successfully rebased and updated refs/heads/dev.
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么交互式rebase无法正常工作?我的Git配置有问题吗?

更新

git config --global rebase.autoSquash 没有回报

git rebase squash

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

使用TPH进行实体框架的多级继承

我正在使用Entity Framework在现有遗留数据库的新项目中创建Table Per Heirachy数据模型.这意味着我们不拥有数据库,因此我需要一个不涉及向OrderDiscount表添加列的解决方案.

我的数据模型中有以下结构:

       ??????? (abstract) OrderDiscountBase ???????
       ?                                          ?
       ?                                          ?
SaleOrderDiscount          ???? (abstract) SellerOrderDiscountBase ????
                           ?                                          ?
                           ?                                          ?
                FreeShippingOrderDiscount                 PercentageValueOrderDiscount
Run Code Online (Sandbox Code Playgroud)

有一个预先存在的鉴别器列来区分具体类型.它被调用DiscountType并且可以保存值PercentageOffPromoDiscount,FreeShippingPromoDiscountSaleDiscount.

我的项目中有以下映射,不幸的是,它没有工作.

private void ConfigureOrderDiscountEntity(EntityTypeConfiguration<OrderDiscountBase> entity)
{
    entity
        .HasKey(orderDiscount => orderDiscount.Id)
        .Map<SaleOrderDiscount>(
            configuration => configuration.Requires("DiscountType").HasValue(OrderDiscountTypes.Sale))
        .Map<PercentageValueOrderDiscount>(
            configuration => configuration.Requires("DiscountType").HasValue(OrderDiscountTypes.PercentageOff))
        .Map<FreeShippingOrderDiscount>(
            configuration => configuration.Requires("DiscountType").HasValue(OrderDiscountTypes.FreeShipping))
        .ToTable(tableName: "OrderDiscount", schemaName: "Orders")
        ;
}
Run Code Online (Sandbox Code Playgroud)

我看到的例外是:

EntityTypes SellerOrderDiscountBase,SaleOrderDiscount,FreeShippingOrderDiscount,PercentageValueOrderDiscount被映射到表OrderDiscountBase中的相​​同行.映射条件可用于区分这些类型映射到的行.

我已经看到人们通过添加第二个鉴别器列来解决旧版本的Entity Framework中的这个问题,但正如我所说,我无法对数据库进行更改.

我要求EF做的并不难,所以我假设我刚刚错误地配置了我的实体.

c# entity-framework tph

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

省略类型往返不适用于泛型

鉴于广泛共享的类型 Omit,其定义为:

type Omit<ObjectType, KeysType extends keyof ObjectType> =
    Pick<ObjectType, Exclude<keyof ObjectType, KeysType>>;
Run Code Online (Sandbox Code Playgroud)

它用于减去类型(与相交相反),或者换句话说,从类型中删除某些属性。

我试图利用这种类型来编写一个函数,该函数将采用T缺少其中一个属性的 type 对象,然后设置该缺少的属性并返回 type 的值T

以下使用特定类型的示例一切正常:

type A = { x: string }
function f(arg: Omit<A, 'x'>): A {
    return { ...arg, x: "" }
}
Run Code Online (Sandbox Code Playgroud)

但完全相同的函数,通用后,无法编译:

function g<T extends A>(arg: Omit<T, 'x'>): T {
    return { ...arg, x: "" }
}
Run Code Online (Sandbox Code Playgroud)

的定义错误为g

输入 'Pick> & { x: 字符串; }' 不可分配给类型“T”。

但我确信这个错误消息是错误的。类型Pick<T, Exclude<keyof T, "x">> & { x: string; …

generics typescript

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

是否可以为整个 MVC 应用程序设置全局 RoutePrefix?

我有一个 MVC 站点,我们只是用它来托管新的结账流程。我们的 ARR 服务器中有一个重写规则,以便任何对https://www.oursite.com/checkout的请求都会转到这个新应用程序而不是旧站点。

这意味着对新应用程序的每个请求都以 开始,/checkout这让我们遇到了稍微不满意的情况,即站点中的每个控制器都用 装饰[RoutePrefix("checkout")]

有没有一种方法可以设置自动应用于应用程序中所有控制器的全局路由前缀?我们没有一个通用的基础控制器来添加属性。我能想到的唯一选择是回到老式路由:

routes.MapRoute(
            "Default",
            "checkout/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" }
        );
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用属性路由,所以我想调用类似routes.MapMvcAttributeRoutes(globalPrefix: "checkout");

我怎样才能做到这一点?

c# asp.net-mvc routes

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