小编Ces*_*Gon的帖子

从C#上的Windows shell上下文菜单中获取多个文件(参数)

我正在编写一个C#应用程序,它将文件作为参数,我将它添加到shell上下文菜单中,代码如下所示;

if (((CheckBox)sender).CheckState == CheckState.Checked)
            {
                RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Classes\\*\\shell\\" + KEY_NAME + "\\command");

                if (key == null)
                {
                    key = Registry.CurrentUser.CreateSubKey("Software\\Classes\\*\\shell\\" + KEY_NAME + "\\command");
                    key.SetValue("", Application.ExecutablePath + " \"%1\"");
                }
            }
            else if (((CheckBox)sender).CheckState == CheckState.Unchecked)
            {
                RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Classes\\*\\shell\\" + KEY_NAME);

                if (key != null)
                {
                    Registry.CurrentUser.DeleteSubKeyTree("Software\\Classes\\*\\shell\\" + KEY_NAME);
                }
Run Code Online (Sandbox Code Playgroud)

它运行良好,但如果我选择多个文件,则运行多个应用程序实例.例如,如果我选择5个文件5应用程序正在打开,我该如何解决这个问题?

c# windows

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

根据客户端不提供aspNetHidden div

我正在开发一个 C# 应用程序,它可以获取网页并逐行处理它们的内容。为此,我使用HttpClient该类,并通过ReadAsStreamAsync(). 然后我将流读入一个线数组并对其进行迭代。到现在为止还挺好。

但是,如果我使用 Chrome 或 Edge 导航到网页并使用“查看源”获取 HTML,我使用此方法获得的 HTML 与我观察到的 HTML 不同。特别是,__VIEWSTATE 和 __VIEWSTATEGENERATOR 隐藏input元素被div具有以下元素的元素包围class="aspNetHidden",当我使用的浏览器,而不是当我编程方式获得的HTML。这破坏了我的行跟踪逻辑,因为浏览器看到的页面中有额外的行,与我在代码中获取的页面相关。

编辑。经过一些测试,我确信客户端使用的用户代理标头决定了是否class="aspNetHidden" div提供服务。当我模仿浏览器的用户代理(“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36 Edg/83.0.478.37”)时,服务div是 如果我使用其他代理,例如“测试客户端”,div则不会提供服务。

我的问题是,是否有任何文档说明哪些用户代理字符串会导致div提供服务,哪些不提供服务?另外,我可以防止这种情况发生吗?

谢谢。

html c# asp.net dotnet-httpclient

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

在Mac上编辑.resx文件

在运行OSX的Mac上,可以使用任何应用程序来编辑.resx文件吗?

我只需要能够编辑字符串资源。

编辑。我知道.resx文件是XML文件。但是,我正在寻找一个可以使用干净的用户界面编辑.resx文件的应用程序,就像Visual Studio一样,它隐藏了XML的复杂性。我不希望用户能够意外修改XML结构。

macos resx

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

如何创建多语言域模型

我正在使用域驱动设计,我对我的域模型有一个非常清晰的描述.它包含120多个类,非常稳定.我们将在.NET 4和C#中实现它.问题是,我们需要模型多语言; 某些属性需要以多种语言存储.例如,Person类具有类型的Position属性,string该属性应该以英语(例如"Librarian")和西班牙语(例如"Bibliotecario")存储值.此属性的getter应根据某些语言参数返回英语或西班牙语版本.

在这里开始我的问题.我不知道如何参数化.我有两种主要方法可以做到:

  1. 使用属性集合.位置不是一个string而是一个Dictionary<Language, string>,它可以让客户通过语言检索人的位置.
  2. 保持简单的标量属性,但要根据全局已知的"当前语言"设置返回(或设置)一种或多种语言的值.客户端代码将设置工作语言,然后所有对象将设置并获取该语言的值.

选项1避免了全局状态,但它弄乱了我模型中几乎每个类的接口.另一方面,选项2的表达力较差,因为如果不查看全局设置,您无法分辨出将要获得的语言.此外,它还为全局设置中的每个类引入了依赖项.

请注意,我对数据库或ORM实现不感兴趣; 我只在域模型级别工作.

那我有两个具体的问题:

  • 哪个是实现我的多语言域模型目标的最佳选择(1或2)?
  • 还有其他我没有考虑的选择,它们是哪些?

谢谢.

编辑.有人建议这是一个与用户界面相关的问题,因此可以通过.NET中的全球化/本地化支持来解决.我不同意.只有当您知道在编译时必须向用户显示的本地化文字时,UI本地化才有效,但这不是我们的情况.我的问题涉及在编译时未知的多语言数据,因为它将在运行时作为用户数据提供.这不是与UI相关的问题.

编辑2.请记住,Person.Position只是一个说明问题的玩具示例.它不是真实模型的一部分.不要试图批评或改进它; 这样做没有意义.我们的业务需求涉及许多无法编码为枚举类型或类似的属性,并且必须保留为自由文本.因此困难.

multilingual domain-driven-design

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

在ASP.NET Web应用程序中忽略其他文化的全局资源

我有这个ASP.NET Web应用程序,我正在使用Visual Studio 2015和.NET 4.6.1进行开发.我广泛使用本地和全球资源将我的应用本地化为英语(默认),西班牙语和加利西亚语.在我使用IIS Express的开发机器上,一切正常.但是,当我将Web应用程序发布到使用Windows Server 2008上的IIS 7的生产服务器时,将忽略西班牙语全局资源,并且仅使用默认的英语和加利西亚语.

我通过Web Publish的"文件系统"方法发布Web应用程序.据我所知,没有.resx为全球资源部署文件; 相反,命名文件App_GlobalResources.resources.dll被部署到bin,bin/esbin/gl文件夹.另外,MyNamespace.resources.dll部署文件bin/es但不是bin/gl,这非常奇怪.

我也必须说,我切换的文化在我的代码设置Thread.CurrentThread.CurrentUICulture到一个CultureInfo基于两个对象en-GB,es-ESgl-ES.

我尝试使用中性(例如gl)和gl-ES文化代码的本地化(例如)形式在我的代码中命名全局资源文件.这似乎没有任何区别.此外,本地资源文件使用中性变体命名.

有没有想过西班牙全球资源被忽视的想法?谢谢.

asp.net localization resx

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

使用母版页在ASP.NET应用程序上切换语言

我正在使用Visual Studio 2008和ASP.NET来构建Web应用程序.我的大多数网页都基于一个母版页.该母版页包含三个用作语言切换的按钮链接; 该Click事件处理程序是这样的:

protected void lbuLangEN_Click(object sender, EventArgs e)
{
    this.SwitchLanguage(string.Empty);
}  

protected void lbuLangES_Click(object sender, EventArgs e)
{
    this.SwitchLanguage("es");
}
Run Code Online (Sandbox Code Playgroud)

然后我有我的私人方法SwitchLanguage:

private void SwitchLanguage(string culture)
{
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该足以使基于我的母版页的页面表现出本地化的行为,即resx根据文化从适当的本地文件中获取资源.但是,它不起作用.它们总是以西班牙语出现,这是我浏览器的默认语言.我在入口和出口处设置了一些跟踪消息SwitchLanguage,显然当前线程没有改变它的文化信息:每次SwitchLanguage调用时,当前线程的文化都是"es-ES",无论我的代码刚刚设置了什么.

我的代码或我采用的方法有问题吗?谢谢.

asp.net localization master-pages cultureinfo

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

需要在Excel中进行12小时的格式化

考虑带有一列错误数据的Excel工作表.我们有一个表可用于纠正数据.我的代码通过编写包含旧工作表的新工作表以及添加新的正确数据列来进行比较来运行它.

这个日期很好并且有效但是它将日期/时间变成了24小时的格式.

如何更改为使用首选格式?

newSheet.Cells[i + 2, 3] = drugorder.DATE;
newSheet.Cells[i + 2, 3].NumberFormat = "m/d/yyyy h:mm"; 
Run Code Online (Sandbox Code Playgroud)

c# asp.net excel

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

在SQL Server 2008 R2和SQL Server Compact 4中存储日期/时间数据的最佳方法

我们正在使用SQL Server 2008 R2作为后端在C#4中开发一个应用程序.在极少数情况下,SQL Server Compact 4也用于断开连接的客户端.我们想知道将日期/时间数据存储到这些数据库中的最佳方法是什么,以便:

  1. 包含不同时间偏移(来自不同时区)的数据可以很好地共存.这意味着要进行排序和比较.
  2. SQL Server 2008 R2和SQL Server Compact 4中的数据可以无缝地来回传输; 这是次要要求,不应损害所选设计.

我们主要关注的是保留每个记录事件的本地时间,但不会失去比较和排序从不同时区生成的事件的能力,因此具有不同的时间偏移.

我们已经考虑了datetimeoffset数据类型,因为它存储时间偏移,因为它很好地映射到.NET DateTimeOffset.但是,SQL Server Compact 4不支持它.另一种方法是从数据库中删除偏移信息并使用简单的datetime数据类型,以便数据库中的每个数据都被标准化,并且Compact的问题更少.然而,这引入了在用户看到数据之前需要以某种方式重建偏移信息的问题.

所以我的问题是,是否有关于如何在SQL Server中存储日期/时间值的最佳实践或指南,考虑到我们需要处理不同的时区,并使2008 R2和Compact 4之间的互操作性变得简单尽可能?

谢谢.

timezone datetimeoffset sql-server-2008 sql-server-ce

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

推断方法中的类型参数

我的C#库中有一个表示域实体的类​​层次结构,所有这些类最终都来自名为的根抽象类DomainEntity。一些示例是PackageCustomer。我Create()在每个类中使用工厂方法来创建实例。我也有一个通用处理器类Processor<T>where T: DomainEntity。该处理器类还使用要实例化的工厂方法,并执行取决于特定类(因此取决于其类型参数)的业务逻辑。使用这个库,我可以例如编写如下代码:

var pkg = Package.Create(/* various arguments */);
var pro = Processor<Package>.Create(pkg);
pro.DoStuff();
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。现在,我想编写一个方法,DomainEntity该方法为任何特定的域实体返回处理器。像这样:

public Processor<T> CreateProcessor<T>()
    where T: DomainEntity
{
    var pro = Processor<T>.Create((T)this);
    return pro;
}
Run Code Online (Sandbox Code Playgroud)

这种方法可以这样使用:

var pkg = Package.Create(/* various arguments */);
var pro = pkg.CreateProcessor<Package>();
pro.DoStuff();
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,但是我Package在调用中找到了对引用的CreateProcessor()冗余,因为我在实例上调用方法Package,因此对于类型参数应引用的类没有任何歧义。但是,这将无法编译:

var pkg = new Package(/* various arguments */);
var pro = pkg.CreateProcessor(); //<-- this does not compile. …
Run Code Online (Sandbox Code Playgroud)

c# generics methods extension-methods

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

将(某些)Unicode 非空格标记与关联字母相结合以进行统一处理

我正在用 C# 编写一个文本处理 Windows 应用程序。该应用程序处理许多纯文本文件以计算字符、单词等。为此,该应用程序会迭代每个文件中的字符。我发现某些文本文件表示重音字母,例如\xc3\xa1使用 Unicode 字符 U+00E1(小写字母 A 带尖音符号),而其他文本文件则使用简单的非重音符号a(U+0061,小写字母 A),后跟 U+0301(组合尖锐的口音)。通过记事本或我使用的其他编辑器在屏幕上呈现文本的方式没有视觉差异,但底层字符流明显不同。

\n

我想以同样的方式检测和处理这两种情况。换句话说,我希望我的应用程序将一个字母和一个组合代码点组合成等效的独立字符。例如,我想将序列 U+0061 U+0301 组合成 U+00E1。据我所知,除了一个大型且容易出错的查找表来查找普通字母和组合字符的所有可能组合之外,没有简单的算法可以做到这一点。

\n

我有更简单、更直接的算法来执行这种组合吗?

\n

c# unicode text

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