小编Mac*_*iak的帖子

如何在电子App中访问appId

在Electron应用程序中,如何访问appId我在"build"部分中指定的内容package.json

"build": {
    "appId": "com.myapp.Something"
}
Run Code Online (Sandbox Code Playgroud)

在开发中,我可以package.json直接导入和访问它,但是"build"打包的应用程序中没有一节。我想将该ID用于节点通知程序。

javascript electron

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

Nullable类型之间的转换

.NET 4.0中是否有转换器支持可空类型之间的转换以缩短指令,例如:

bool? nullableBool = GetSomething();
byte? nbyte = nullableBool.HasValue ? (byte?)Convert.ToByte(nullableBool.Value) : null;
Run Code Online (Sandbox Code Playgroud)

.net c# nullable

7
推荐指数
2
解决办法
6300
查看次数

在构建期间从Visual Studio Extension传递自定义项目属性

如何从Visual Studio Extension将自定义MsBuild属性传递给Visual Studio构建引擎(我想编写自定义加载项)?就像Visual Studio的本身传递的属性,如$(Configuration)$(Platform),我想附加到构建过程,并通过我自己的财产(例如$(MyCustomProperty) = "foobar").我知道可以使用MsBuild命令行(/p:Property)完成它,但我想从扩展中完成它.

这是我想要的一个例子:visual studio工具栏上的一个文本框,用户可以输入一些文本 - 一个值,我想传递给构建引擎.

然后在.csproj中:

<PropertyGroup>
  <MyCustomProperty Condition=" '$(MyCustomProperty)' == '' ">DefaultValue</MyCustomProperty>
</PropertyGroup>

<Target Name="AfterBuild" Condition=" '$(MyCustomProperty)' = 'DoAfterBuild' ">
  ...
</Target>
Run Code Online (Sandbox Code Playgroud)

因此,AfterBuild只有当用户输入DoAfterBuild我的扩展程序的文本框时,目标才会被激活

msbuild vsx visual-studio vsix

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

如何使用Roslyn CTP将尾随行添加到AttribueList

我试图[DataContractAttribute]使用Roslyn CTP语法生成一些属性.不幸的是,Roslyn将属性放在与属性相同的行上.

这是我得到的:

[DataContract]public int Id { get; set; }
[DataContract]public int? Age { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

[DataContract]
public int Id { get; set; }
[DataContract]
public int? Age { get; set; }
Run Code Online (Sandbox Code Playgroud)

发电机代码:

string propertyType = GetPropertyType();
string propertyName = GetPropertyName();
var property = Syntax
    .PropertyDeclaration(Syntax.ParseTypeName(propertyType), propertyName)
    .WithModifiers(Syntax.TokenList(Syntax.Token(SyntaxKind.PublicKeyword)))
    .WithAttributeLists(
        Syntax.AttributeList(
            Syntax.SeparatedList<AttributeSyntax>(
                Syntax.Attribute(Syntax.ParseName("DataContract")))))
    .WithAccessorList(
        Syntax.AccessorList(
            Syntax.List(
                Syntax.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
                    .WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken)),
                Syntax.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration)
                    .WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken))
        )));
Run Code Online (Sandbox Code Playgroud)

在将这些属性包装在类,命名空间和最后的CompilationUnit之后,我使用以下代码来获取字符串结果:

var compUnit = Syntax.CompilationUnit().WithMembers(...);
IFormattingResult fResult = compUnit.Format(new FormattingOptions(false, 4, 4));
string result = fResult.GetFormattedRoot().GetText().ToString();
Run Code Online (Sandbox Code Playgroud)

.net c# code-generation roslyn

7
推荐指数
2
解决办法
2690
查看次数

使用CruiseControl.NET预处理器将常量传递给预定义块

在CC.NET中将预处理器常量"传递"到预定义块的首选方法是什么?

假设我有以下声明:

<cb:define name="ProjectHeaderBlock">
    <name>$(ProjectName)</name>
    <workingDirectory>C:\MyProjects\$(ProjectName)</workingDirectory>
</cb:define>

<cb:define name="ProjectBlock">
    <project>
        <cb:ProjectHeaderBlock />

        <triggers />
        <tasks />
        <publishers />
    </project>
</cb:define>
Run Code Online (Sandbox Code Playgroud)

我可以通过两种方式传递ProjectName常量:

  1. 使用cb:scope

    <cb:scope ProjectName="FooProject" >
        <cb:ProjectBlock />
    </cb:scope>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接通过声明

    <cb:ProjectBlock ProjectName="FooProject" />
    
    Run Code Online (Sandbox Code Playgroud)

它们都正常工作,内部ProjectHeaderBlock使用正确的ProjectName值进行初始化.

这两个选项之间有什么区别吗?哪一个更好/更有效?

.net cruisecontrol.net

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

F#可选参数和重载替代

在我的F#应用程序中,我经常需要对字符串中的字符串执行不区分大小写的搜索,因此我使用适当的比较创建了一个函数:

let indexOf (str:string) (value:string) startIndex =
    match str.IndexOf(value, startIndex, StringComparison.OrdinalIgnoreCase) with
    | index when index >= 0 -> Some index
    | _ -> None
Run Code Online (Sandbox Code Playgroud)

我不喜欢这样的事实,当我想从头开始搜索时,我必须将冗余0作为起始索引.

我对F#和函数式编程都比较陌生,所以我想从功能的角度来看,什么是首选的(最干净的)解决方案?

  1. 创建两个版本:

    let indexOfFrom (str:string) (value:string) startIndex = (...)
    let indexOf str value = indexOfFrom str value 0
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用选项类型:

    let foundIndex = indexOf "bar foobar" "bar" (Some 4)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个专门的歧视联盟:

    type Position =
        | Beginning
        | StartIndex of index : int
    let foundIndex = indexOf "bar foobar" "bar" (Index 4)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将'indexOf'函数放在一个类型中并使用'经典'重载.

  5. 将'indexOf'函数放在一个类型中并使用F#可选参数.

f# functional-programming

5
推荐指数
2
解决办法
1004
查看次数

如何确定Swift代码是否在XCode Playground中运行

我正在编写一个简单的应用程序,在Swift中读取CSV文件,我希望能够在Playground中使用相同的代码并将其作为swift命令的输入文件.

要在Playground中读取文件,我必须使用此代码

let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
Run Code Online (Sandbox Code Playgroud)

我希望实现以下目标:

#if PLAYGROUND
import XCPlayground
let filePath = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("data.csv")
#else
let filePath = NSURL.fileURLWithPath("data.csv")
#endif
Run Code Online (Sandbox Code Playgroud)

swift

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

将包含通配符的MSBuild属性展开为Items

我想写的MSBuild脚本,将执行一些预定义的目录上的任意文件的一些动作(例如打印其路径.)(指定为命令行上的属性)(F:\文件).

给出以下目录结构

F:\Files\TextFile.txt
F:\Files\Subdir1\ImageFile.bmp
F:\Files\Subdir1\SubSubdir\ImageFile2.bmp
F:\Files\Subdir1\SubSubdir\TextFile2.txt
Run Code Online (Sandbox Code Playgroud)

和MSBuild脚本

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="PrintNames" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <TargetDir>F:\Files</TargetDir>
    </PropertyGroup>

    <ItemGroup>
        <Files Include="$(TargetDir)\$(InputFiles)"/>
    </ItemGroup>

    <Target Name="PrintNames">
        <Message Text="Files: @(Files, ', ')" />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

使用设置为"**\*.bmp;**\*.txt"的InputFiles运行脚本仅适用于bmp文件.Txt文件取自当前工作目录,而不是"F:\ Files"

.net c# msbuild

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

以功能方式从段创建F#记录

从表示此记录段的区别联合实例列表中创建记录实例的最佳方法是什么.

我正在尝试使用F#学习函数式编程,所以我想以"功能"方式进行,而不使用类似于开关的模式匹配和可变字段(这是我想要使用记录类型的方式)

我的记录类型:

type Entity = {
    Numbers: int[]
    Date: DateTime
    Name: string
}
Run Code Online (Sandbox Code Playgroud)

代表单个细分的联盟:

type EntitySegment =
    | Date of DateTime
    | Name of string
    | Number of int
Run Code Online (Sandbox Code Playgroud)

我想做以下事情:

// segments could be in arbitrary order
let segments = [ Number 5; Name "Foobar"; Number 8; Number 3; Date System.DateTime.Now; Number 42 ];;
let myRecord = createEntity segments
Run Code Online (Sandbox Code Playgroud)

和myRecord将是:

val myRecord : Entity = {Numbers = [|5; 8; 3; 42|]; Date = 2014-07-06 17:02:36; Name = "Foobar";}
Run Code Online (Sandbox Code Playgroud)

f# functional-programming

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

在RxSwift中重新启动可观察间隔的正确方法

在我的OS X状态栏应用程序中,我正在使用interval函数定期调用外部api并显示结果:

Observable<Int>
    .interval(120.0, scheduler: MainScheduler.instance)
    .startWith(-1) // to start immediately
    .flatMapLatest(makeRequest) // makeRequest is (dummy: Int) -> Observable<SummaryResponse?>
    .subscribeNext(setSummary)
    .addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)

但是,如果用户在此期间更改了首选项,我希望"重新启动"此时间间隔并立即进行新呼叫以反映更改(无需等待下一次调用).

最好的方法是什么?

  1. 将observable存储为属性并将其设置为nil或调用.dispose()它(或两者)并创建一个新的可观察对象?
  2. 设置disposeBagnil创建一个新的观察到的?
  3. 还有其他方法吗?

swift rx-swift

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

ASP.NET WebAPI的哪一部分负责解析JObject的动态

我有一个ApiController与以下方法:

public void Post(dynamic data)
{
    Type actualType = data.GetType(); // returns JObject
}
Run Code Online (Sandbox Code Playgroud)

当我进行AJAX调用,将JSON数据发送到控制器时,'data'参数的实际类型是JObject(来自Newtonsoft.Json库).WebAPI的哪个部分负责将此请求中的数据绑定到JObject?它是模型粘合剂吗?如果是这样,哪一个?(有几个内置的,例如'MutableObjectModelBinder','TypeMatchModelBinder'等)

c# asp.net json.net asp.net-web-api

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