小编BAC*_*CON的帖子

162
推荐指数
5
解决办法
5万
查看次数

使用ASP.NET路由提供静态文件

可以使用ASP.Net路由(而不是MVC)来提供静态文件吗?

说我想路线

http://domain.tld/static/picture.jpg
Run Code Online (Sandbox Code Playgroud)

http://domain.tld/a/b/c/picture.jpg
Run Code Online (Sandbox Code Playgroud)

我想动态地做这件事,因为重写的URL是动态计算的.我无法一劳永逸地建立静态路线.

无论如何,我可以创建这样的路线:

routes.Add(
  "StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
Run Code Online (Sandbox Code Playgroud)

FileRouteHandler.ProcessRequest方法我可以重写从路径/static/picture.jpg/a/b/c/picture.jpg.然后我想为静态文件创建一个处理程序.ASP.NET使用它StaticFileHandler来实现此目的.不幸的是,这堂课是内部的.我试图使用反射创建处理程序,它实际上工作:

Assembly assembly = Assembly.GetAssembly(typeof(IHttpHandler));
Type staticFileHandlerType = assembly.GetType("System.Web.StaticFileHandler");
ConstructorInfo constructorInfo = staticFileHandlerType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
return (IHttpHandler) constructorInfo.Invoke(null);
Run Code Online (Sandbox Code Playgroud)

但使用内部类型似乎不是正确的解决方案.另一个选择是实现我自己的StaticFileHandler,但正确地这样做(支持范围和etags等HTTP的东西)是非常重要的.

我该如何处理ASP.NET中静态文件的路由?

asp.net url-routing

71
推荐指数
4
解决办法
7万
查看次数

为什么我的本地创建的脚本不允许在RemoteSigned执行策略下运行?

我在64位Windows 7 Professional上使用Windows PowerShell 2.0 .我的桌面上有一个脚本,当我尝试运行它时会导致以下错误:

File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system.  Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException
Run Code Online (Sandbox Code Playgroud)

我既是域管理员又是本地管理员,如果我运行Get-ExecutionPolicy -List,我可以看到Group Policy Object我创建的配置PowerShellRemoteSigned在机器级正确应用执行策略:

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy    RemoteSigned
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined
Run Code Online (Sandbox Code Playgroud)

我自己在记事本中 …

powershell code-signing powershell-2.0

55
推荐指数
6
解决办法
14万
查看次数

如何修复 Visual Studio 2022 警告 CA1416“所有平台均可访问调用站点”但“仅支持:'windows'”?

所以我有一个 C# 类库项目,我只打算在 Windows 上使用。它包含一些使用System.Drawing.Image仅在 Windows 上可用的类的类。升级到 Visual Studio 2022 并将目标框架设置为 .NET 6.0 后,我看到一堆警告:

\n
\n

CA1416 “此调用站点可在所有平台上访问。\'SomeClass.SomeMethod\' 仅在以下平台上受支持:\'windows\'。

\n
\n

请参阅下面的屏幕截图了解一些示例:

\n

Visual Studio 2022 中的“错误列表”窗格显示多个 CA1416“此调用站点在所有平台上均可访问。\'.\' 仅在:\'windows\' 上受支持。”  错误

\n

从某种意义上说,VS2022 扫描了库并找到了我在库中使用的所有平台特定代码,这很酷。但我想告诉 VS,我只打算在 Windows 上使用该库,它可以消除所有这些警告。

\n

首先,我检查了Target framework项目属性中的选项,但没有看到任何 Windows 特定目标。

\n

项目属性的应用程序 \xe2\x86\x92 常规页面上的“目标框架”下拉框已展开以显示 .NET、.NET Core 和 .NET Framework 的可用版本

\n

然后我决定直接编辑项目.csproj并更改Target framework

\n
<TargetFramework>net6.0</TargetFramework>\n
Run Code Online (Sandbox Code Playgroud)\n

\n
<TargetFramework>net6.0-windows</TargetFramework>\n
Run Code Online (Sandbox Code Playgroud)\n

但是,遗憾的是,即使在重新编译之后,警告也没有消失。然后我读了一些警告CA1416,果然Microsoft Docs中说,评估此警告时会忽略目标框架名称,但是,VS 确实根据影响此警告的 TFM 向项目添加了一个属性,但是仅当项目配置为AssemblyInfo.cs动态生成文件时,它才会这样做。但是,唉,我的项目是AssemblyInfo.cs作为实际文件维护的,而不是在构建时自动生成的。

\n

因此,此时,我已准备好踢球并禁用CA1416我的项目的警告。因此,在项目的.proj文件中,我添加了CA1416发布和调试版本,如下所示:

\n
<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Debug|AnyCPU\'">\n    <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\n\n<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Release|AnyCPU\'">\n    <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\n
Run Code Online (Sandbox Code Playgroud)\n …

c# code-analysis visual-studio microsoft.codeanalysis .net-6.0

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

为什么我可以声明一个与父作用域中的变量同名的子变量?

我最近写了一些代码,我无意中将一个变量名重用作为一个动作的参数,该动作在一个已经具有同名变量的函数中声明。例如:

var x = 1;
Action<int> myAction = (x) => { Console.WriteLine(x); };
Run Code Online (Sandbox Code Playgroud)

当我发现重复时,我惊讶地发现代码编译并完美运行,根据我对 C# 中作用域的了解,这不是我所期望的行为。一些快速的谷歌搜索出现了抱怨类似代码确实会产生错误的SO 问题,例如Lambda Scope Clarification。(我将该示例代码粘贴到我的 IDE 中以查看它是否可以运行,只是为了确保它可以完美运行。)此外,当我在 Visual Studio 中进入“重命名”对话框时,第一个x被突出显示为名称冲突。

为什么这段代码有效?我在 Visual Studio 2019 中使用 C# 8。

c# lambda scope variable-names c#-8.0

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

如何从非常大的列表中按索引有效地删除元素?

我有一个非常大的整数列表(大约 20 亿个元素)和一个带有索引(几千个元素)的列表,我需要从第一个列表中删除元素。我目前的方法是遍历第二个列表中的所有索引,将每个索引传递给RemoveAt()第一个列表的方法:

indices.Sort();
indices.Reverse();
for (i = 0; i < indices.Count; i++)
{
    largeList.RemoveAt(indices[i]);
}
Run Code Online (Sandbox Code Playgroud)

但是,大约需要 2 分钟才能完成。我真的需要更快地执行此操作。有没有办法优化这个?

我有一个带有 10 个内核的 Intel i9X CPU,所以也许是某种并行处理方式?

.net c# performance list generic-list

26
推荐指数
4
解决办法
1482
查看次数

为什么ControlCollection不会抛出InvalidOperationException?

按照这个问题Foreach循环处理控件跳过迭代它告诉我,迭代是允许通过更改集合:

例如,以下内容:

List<Control> items = new List<Control>
{
    new TextBox {Text = "A", Top = 10},
    new TextBox {Text = "B", Top = 20},
    new TextBox {Text = "C", Top = 30},
    new TextBox {Text = "D", Top = 40},
};

foreach (var item in items)
{
    items.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)

InvalidOperationException:Collection已被修改; 枚举操作可能无法执行.

但是,在.Net表单中,您可以执行以下操作:

this.Controls.Add(new TextBox {Text = "A", Top = 10});
this.Controls.Add(new TextBox {Text = "B", Top = 30});
this.Controls.Add(new TextBox {Text = "C", Top = 50});
this.Controls.Add(new …
Run Code Online (Sandbox Code Playgroud)

.net c# foreach invalidoperationexception winforms

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

来自GAC的Import-Module用于PowerShell用法

我创建了一个PowerShell模块,如果我像这样加载它就可以正常工作

Import-Module "C:\temp\My.PowerShell.DocumentConversion.dll"
Run Code Online (Sandbox Code Playgroud)

我确实在全局程序集缓存中注册了该模块,但无法从那里加载它.我已经验证了模块实际上已加载到gac中.我认为像这样加载模块就足够了

Import-Module My.PowerShell.DocumentConversion.dll
Run Code Online (Sandbox Code Playgroud)

显然我错了,怎么做从gac运行powershell模块?

powershell gac

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

Powershell 从 ForEach 循环导出到 CSV

我是 Powershell 的新手,但我已经尽力了。我正在尝试创建一个脚本来将文件复制到阵列中所有 XP 计算机的所有用户桌面。该脚本基本上是说“如果机器可 ping 通,则复制文件,如果不是,则不复制。” 然后我想将此信息导出到 CSV 文件中以供进一步分析。

我已经设置了一切,但无论我做什么,它都只会导出它运行的最后一台电脑。它似乎运行在所有 PC 上(通过输出到 txt 文件进行测试),但它不会将所有计算机记录到 CSV。任何人都可以提供任何建议吗?

$ArrComputers = "PC1", "PC2", "PC3"

foreach ($Computer in $ArrComputers) {
    $Reachable = Test-Connection -Cn $Computer -BufferSize 16 -Count 1 -ea 0 -quiet
    $Output = @()

    #Is the machine reachable?
    if($Reachable)
    {
        #If Yes, copy file
        Copy-Item -Path "\\servername\filelocation" -Destination "\\$Computer\c$\Documents and Settings\All Users\Desktop\filename" 
        $details = "Copied"  
    } 
    else
    {
        #If not, don't copy the file
        $details = "Not Copied"
    }   

    #Store the information from …
Run Code Online (Sandbox Code Playgroud)

csv powershell export-csv

8
推荐指数
1
解决办法
13万
查看次数

iOS/Safari 上的 HLS 视频流

我正在尝试在 safari iOS 上使用 Aframe 流式传输 hls,其中 Aframe 在后台具有三个.js。但视频显示黑屏,仅播放音频。视频 src 的类型为 .m3u8。我试图通读很多相关的帖子,但似乎没有一个合适的解决方案。让 HLS 和 WebGL 在 iOS 上运行是一种一厢情愿的想法吗?如果没有,请有人帮我解决一个问题。

关于 github 上可用问题的一些讨论:

html video-streaming html5-video ios aframe

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