虽然有很多关于.net配置文件的帖子,但我相信我的要求不允许提出任何解决方案(或者我不理解这个过程对我有用).
情况是我有一个Windows窗体应用程序(也可能是另一个应用程序),它绑定某些用户输入字段(例如IP地址),以及表单属性(窗口大小等)到应用程序设置(在属性中 - >设置区域).据我所知,这些设置与我项目的app.config文件中的设置相同,因此我应该能够使用System.Configuration.ConfigurationManager类来操作这些设置.
我想要做的是允许用户导出和导入所有已保存的设置.我认为保存和替换应用程序使用的配置文件会更容易,而不是对某些自定义对象进行序列化或使用INI文件.
将当前设置保存到指定文件相对容易:
internal static void Export(string settingsFilePath)
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
config.SaveAs(settingsFilePath);
}
Run Code Online (Sandbox Code Playgroud)
但是,恢复配置文件以覆盖当前设置很困难.好像我可以像这样打开一个配置文件
var newConfig = ConfigurationManager.OpenExeConfiguration(settingsFilePath)
Run Code Online (Sandbox Code Playgroud)
但我没有看到如何完全替换当前配置中的所有设置与导入文件的设置.[编辑:此重载应该接收.exe的路径,而不是.config文件.如果调用代码未在配置文件中引用相同的程序集,则以这种方式打开exe文件可能会抛出ConfigurationErrorsException.
也许我只需要使用其他帖子中列出的方法来仅替换配置的一部分,而不是整个部分,但我不知道这将如何工作.
有任何想法吗?我是走正确的轨道,还是应该使用INI文件(或其他东西)?
我正在寻找一种方法将PascalCase字符串(例如"MyString")拆分为单独的单词 - "My","String".另一个用户提出了这个问题bash,但我想知道如何使用常规正则表达式或至少在.NET中.
如果你能找到一种方法来分割(并且可选地大写)camelCase字符串:例如,"myString"变成"my"和"String",可以选择大写/小写字符串中的一个或两个.
我使用wsdl.exe将WSDL文件和Types.xsd文件转换为C#文件.wsdl文件指定可选变量(minOccurs="0" maxOccurs="1"),生成的.NET类型通过创建两个字段来处理它 - 一个用于变量(例如status),另一个用于告知您是否指定了(statusSpecified).
有没有办法使用该wsdl工具只创建一个字段Nullable(即如果不是null,则指定)?(如果有帮助,我想我可以更改wsdl文件以获取nillable="true"元素.)
是否有一个不同的,更好的工具将从WSDL生成.NET类型?我使用的是.NET 4,因此如果生成的类型利用了Nullable类型等功能,那将非常有用.
注意:我刚刚意识到我正在使用.NET 2中的wsdl工具,并且较新的项目应该使用WCF来完成这些工作.WCF上的任何指针都可以获得我想要的东西吗?
关于WCF,本文指出了使用该svcutil工具的方向(已经在我的PATH中,所以我可以从文件夹中的命令行运行它与wsdl和xsd文件,如下所示:) svcutil *.wsdl *.xsd /language:C#.不幸的是,使用Nullable类型而不是xSpecified变量,svcutil似乎没有做得更好.
我想使用方法调用格式化任何数字类型,如下所示:
Option Infer On
Option Strict Off
Imports System.Runtime.CompilerServices
Namespace GPR
Module GPRExtensions
<Extension()>
Public Function ToGPRFormattedString(value) As String
' Use VB's dynamic dispatch to assume that value is numeric
Dim d As Double = CDbl(value)
Dim s = d.ToString("N3")
Dim dynamicValue = value.ToString("N3")
Return dynamicValue
End Function
End Module
End Namespace
Run Code Online (Sandbox Code Playgroud)
现在,从围绕Web的各种讨论(VB.Net相当于C#'动态'与Option Strict On,动态关键字相当于VB.Net?),我认为这个代码在传递数字类型时会起作用(double,Decimal ,int等).它没有,正如您在屏幕截图中看到的:

我可以显式地将参数转换为double然后.ToString("N3")工作,但只是在所谓的动态value参数上调用它失败.
但是,我可以使用以下代码在C#中完成它(使用LINQPad).(注意,编译器不允许您dynamic在扩展方法中使用参数,因此这可能是问题的一部分.)
void Main()
{
Console.WriteLine (1.ToGPRFormattedString());
}
internal static class GPRExtensions
{
public …Run Code Online (Sandbox Code Playgroud) 我需要解析文件中的字节,以便在识别出某个字节序列后才获取数据.例如,如果序列只是0xFF(一个字节),那么我可以在集合上使用LINQ:
byte[] allBytes = new byte[] {0x00, 0xFF, 0x01};
var importantBytes = allBytes.SkipWhile(byte b => b != 0xFF);
// importantBytes = {0xFF, 0x01}
Run Code Online (Sandbox Code Playgroud)
但有没有一种优雅的方法来检测多字节序列 - 例如0xFF,0xFF - 尤其是在它开始得到误报匹配的情况下回溯?
我只想创建一个自定义安装程序,以便在安装后运行代码,这需要安装的应用程序的路径.
我读到了如何创建自定义安装程序和自定义操作,以及安装程序中可用的属性,但我不知道如何从自定义安装程序代码中访问这些属性.(甚至不要让我开始了解Windows Installer文档的复杂性.)
最佳答案是使用应用程序路径的自定义安装程序的完整代码.这是我到目前为止所得到的:
using System;
using System.ComponentModel;
namespace Hawk
{
[RunInstaller(true)]
public class Installer : System.Configuration.Install.Installer
{
public Installer()
{
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
try
{
//TODO Find out installer path
string path = (string)stateSaver["TARGETDIR"]; // Is this correct?
// Environment.CurrentDirectory; // What is this value?
MyCustomCode.Initialize(path);
}
catch (Exception ex)
{
// message box to show error
this.Rollback(stateSaver);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个安装程序(Visual Studio安装项目),它使用DIFxApp和Orca转换来安装驱动程序.问题是有两个DIFxApp合并模块 - 一个用于x86,另一个用于x64.如果我同时引用它们,则安装仅适用于64位计算机,而仅引用x86版本允许我在32位计算机上安装.
似乎唯一的解决方案是创建两个MSI(一个用于x86,一个用于x64),每个都引用正确的合并模块.我的问题是我应该如何创建一个安装程序,根据目标机器的处理器选择安装哪个MSI?
我和NSIS一起工作过一段时间,所以走这条路可能最容易.其他可能性是Inno-Setup和dotNetInstaller.
类似的问题(但答案不充分):
Nodejs 的 npm 有 package.json 来存储依赖项(用 创建,用npm init修改npm install aPackage anotherPackage --save,并与 一起安装npm install)。
Python 的 pip 有 requirements.txt(在pip freeze > requirements.txt安装包pip install apackage anotherpackage并与 `pip install -r requirements.txt 一起安装后创建)。
Ruby 使用什么文件来存储依赖项?如果我使用 安装gem install sass jekyll etc...,如何将这些 dep 包含在文件中并将它们全部安装在新机器上?
相当于 npm 或 rubygems 的 Python和相当于 `pip install -r requirements.txt`的 gem 指向使用 Gemfile 的 bundler gem - 这是事实上的 Ruby 标准吗?
Pycharm(以及其他intellij IDE)具有意图操作的想法.我想要自定义的是"插入文档字符串存根",以便它包含类型注释.我无法输入After部分或找到一个允许我修改它的菜单 - 这可能吗?如果没有,是否有另一个插件或允许这样修改的东西?
