小编Jas*_*oyd的帖子

LINQ可以在PowerShell中使用吗?

我试图在PowerShell中使用LINQ.看起来这应该是完全可能的,因为PowerShell是建立在.NET Framework之上的,但我无法让它工作.例如,当我尝试以下(人为的)代码时:

$data = 0..10

[System.Linq.Enumerable]::Where($data, { param($x) $x -gt 5 })
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法找到"Where"和参数计数的重载:"2".

不要紧,这可以通过以下方式实现Where-Object.这个问题的关键不是找到在PowerShell中执行此操作的惯用方法.如果我可以使用LINQ,那么PowerShell中的一些任务将更轻松.

linq powershell

44
推荐指数
3
解决办法
2万
查看次数

Web Api必需参数

使用ASP.NET Web API.如果参数为空,有没有办法自动返回状态代码400?我发现了这个问题,但这是一个应用于所有方法的全局解决方案,我想在每个参数的每个方法的基础上执行此操作.

所以,例如,这就是我目前正在做的事情:

public HttpResponseMessage SomeMethod(SomeNullableParameter parameter)
{
    if (parameter == null)
        throw new HttpResponseException(HttpStatusCode.BadRequest);

    // Otherwise do more stuff.
}
Run Code Online (Sandbox Code Playgroud)

我真的只想做这样的事情(注意所需的属性):

public HttpResponseMessage SomeMethod([Required] SomeNullableParameter parameter)
{
    // Do stuff.
}
Run Code Online (Sandbox Code Playgroud)

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

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

ConfigurationManager.AppSettings在单元测试项目中返回Null

我有一个C#单元测试项目,在app.config文件中有应用程序设置.我正在测试一个存在于不同项目中的类.那个班级取决于两者,ConfigurationManager.AppSettingsConfigurationManager.ConnectionStrings.

被测试的类所在的项目没有app.config文件.我原以为,因为该类正在单元测试项目的上下文中实例化,它将使用单元测试项目的app.config文件.实际上,连接字符串似乎就是这种情况.

该类检索连接字符串没有任何问题.但是,当类尝试检索任何应用程序设置时,配置管理器始终返回null.这里发生了什么?

编辑1

我想也许在测试项目中尝试加载一些设置以查看会发生什么是个好主意.我试着在调用在外部项目中实例化类的代码之前立即加载单元测试中的设置.同样的结果,没有.我想我暂时可以从等式中排除其他项目.

这是我的配置文件的摘录:

<configSections>
  <sectionGroup name="applicationSettings"
                type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    <section name="MyNamespace.Properties.Settings"
             type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
             requirePermission="false" />
  </sectionGroup>
</configSections>

...

<applicationSettings>
  <MyNamespace.Properties.Settings>
    <setting name="Bing_Key"
             serializeAs="String">
      <value>...</value>
    </setting>
  </MyNamespace.Properties.Settings>
</applicationSettings>
Run Code Online (Sandbox Code Playgroud)

以下是我尝试加载设置的方法:

string test = System.Configuration.ConfigurationManager.AppSettings["Bing_Key"];
Run Code Online (Sandbox Code Playgroud)

c# unit-testing app-config application-settings visual-studio

18
推荐指数
3
解决办法
2万
查看次数

Custom attached events in WPF

I might be getting the terminology wrong here, but I think I'm trying to create an attached event.

In the Surface SDK, you can do things like:

<Grid Background="{StaticResource WindowBackground}" x:Name="Foo" s:SurfaceFrameworkElement.ContactChanged="Foo_ContactChanged"/>
Run Code Online (Sandbox Code Playgroud)

I want to create a custom event for which a handler can be added in XAML in the same way, but I'm having trouble.

I can create a custom routed event, but the XAML intellisense doesn't see it and the event handler isn't added if I just type …

c# wpf events routed-events attachedbehaviors

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

字符串数组到数组数组

有时 PowerShell 非常出色,而有时又完全令人沮丧且不直观。它几乎总是一个让我悲伤的数组。

这次我有一个字符串数组。我想将每个字符串拆分为空白,以便最终得到一个字符串数组的数组。我已经尝试过这个:

$data | ForEach-Object { $_.Split(@(), [System.StringSplitOptions]::RemoveEmptyEntries) }
Run Code Online (Sandbox Code Playgroud)

但这只是将所有内容扁平化为一大串字符串,就像SelectManyC# 中一样。我也尝试过这个:

$data | Select-Object { $_.Split(@(), [System.StringSplitOptions]::RemoveEmptyEntries) }
Run Code Online (Sandbox Code Playgroud)

但这给了我一系列PsCustomObject. 我觉得这应该非常容易。我是否遗漏了一些完全明显的东西?

powershell

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

我可以将 CSV 文件打包为模块资源吗

我有一个带有相应模块清单的自定义 PowerShell 模块。在我的模块中的一个命令中,我有一个硬编码的哈希表数组。一开始这很好,但有时我不得不回去向这个硬编码数组添加新的哈希表,并且数组变得很长。以这种方式管理这些数据变得越来越困难。我真正想做的是将此集合移出到外部资源(例如 CSV 文件)中,并让命令从 CSV 文件中读取数据。实际上,这是我从一开始就喜欢的,但直到现在才变得足够痛苦,以至于我不得不弄清楚如何做到这一点。

我的问题是我将如何做这件事?或者甚至可以做到吗?我已经阅读了很多关于模块清单的内容,但我不记得读过任何描述在清单文件中指定附加资源的方法或如何以对模块“私有”的方式加载这些资源的任何内容。我想我可以将 CSV 文件与所有其他 PowerShell 文件一起放在模块的文件夹中,然后也许我可以找到它,$PSScriptRoot但这似乎不是很“官方”(而且我不是 100% 确定它会起作用)。另外,通过这样做,清单中没有任何内容会向其他人暗示模块正常运行需要其他资源。

对于这样的事情是否有最佳实践,或者我是不是完全错了?

powershell powershell-module

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

如何在自定义脚本 cmdlet 中指定参数接受通配符

当你这样做时Get-Help SomeCommand -Full,在每个参数下,在描述之后,还有一些额外的参数属性。这些属性之一是“接受通配符?”。当我为自定义脚本 cmdlet 创建帮助信息时,如何指定参数接受通配符?

powershell

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

如何在Simple Injector中为工厂创建的对象解析装饰器

所以这将涉及到我展示了很多我的管道,但我会尽量将它保持在最低限度,以保持这个问题的简单.

我的一个API端点依赖外部提供程序来完成调用.当用户向该端点发送查询时,他们可以指定在处理查询时他们希望我们使用哪个提供商,假设提供商是BingGoogle.

所以我有一个IProvider接口和两个具体的实现BingProviderGoogleProvider(在我真正的API提供者接口实际上是一个通用的接口,但我离开的仿制药,以避免使这个混乱比它是).我需要根据查询中的字段解析正确的提供程序.Simple Injector不允许注册同一接口的多个具体实现,因此我必须使用工厂; 我创建一个看起来像这样的东西:

public class ProviderFactory
{
    private readonly Func<string, IProvider> _Selector;

    public ProviderFactory(Func<string, IProvider> selector)
    {
        this._Selector = selector;
    }

    public IProvider Get(string provider)
    {
        return this._Selector(provider);
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过这样的方式在容器中注册我的工厂:

container.RegisterSingleton<ProviderFactory>(new ProviderFactory(provider =>
    {
        switch (provider)
        {
            case "Bing":
                return container.GetInstance<BingProvider>()
            case "Google":
                return container.GetInstance<GoogleProvider>()
            default:
                throw new ArgumentOutOfRangeException("Unknown provider: " + provider);
        }
    }));
Run Code Online (Sandbox Code Playgroud)

我测试一下 有用.太棒了.

现在我需要为我创建和注册多个装饰器IProvider.每个具体实现IProvider必须在容器解析它们时应用这些装饰器.为了这个例子,我可以说我有Decorator1Decorator2哪个实现IProvider …

c# decorator simple-injector

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

Powershell Invoke-Sqlcmd to DataTable rowcount 在其 1 条记录时不正确

$sql=("select top 1 * FROM CollectionProfile")

$CollectionProfile = New-Object System.Data.DataTable

$CollectionProfile = Invoke-Sqlcmd -ServerInstance $Instance -Database $db -Query $sql -ErrorAction Stop  

$CollectionProfile.Rows.Count
Run Code Online (Sandbox Code Playgroud)

回报:0

但是,如果我将 TOP 计数更改为 2 -

$sql=("select top 2 * FROM CollectionProfile")
Run Code Online (Sandbox Code Playgroud)

回报:2

让我发疯,是的,我在“内网”上找不到对此的任何引用。我一定是做错了什么,但是什么?

sql-server powershell

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

使用 MSBuild 在 Server 2016 上构建面向 .Net 4.0 的 ASP.Net 项目

我在 Windows Server 2016 上设置了 Jenkins 构建服务器。我安装了“Visual Studio 2017 构建工具”(MSBuild 的最新版本)。当我尝试构建针对 .Net 4.0 的项目时,我收到以下错误消息:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets(1122,5):错误MSB3644:框架“.NETFramework,Version =”的参考程序集v4.0”未找到。要解决此问题,请安装此框架版本的 SDK 或 Targeting Pack,或者将您的应用程序重新定位到已安装 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位您想要的框架。

于是我检查了'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0',发现这个文件夹里果然没有dll,只有xml文件。

因此,我尝试安装完整的 .Net 4.0 框架,认为将安装参考程序集,但我收到以下消息:

1) Microsoft .NET Framework 4 已经是该操作系统的一部分。您不需要安装 .NET Framework 4 可再发行组件。

2) 此计算机上已安装相同或更高版本的.NET Framework 4。

因此,我在 Google 上搜索并找到了几个网站,上面写着“.NET Framework 4.5.2 被认为是 .NET 4 系列的“就地更新”,无需重新编译应用程序”,我想也许我可以只需安装 .Net 4.5.2 目标包并使用 …

.net windows msbuild .net-4.0 windows-server-2016

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