C#2008 SP1
我使用下面的代码:
dt.ReadXml("%AppData%\\DateLinks.xml");
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个异常,指向我的应用程序运行位置:
找不到路径'D:\ Projects\SubVersionProjects\CatDialer\bin\Debug \%AppData%\ DateLinks.xml'的一部分.
我认为%AppData%应该找到相对的路径.当我去Start|Run|%AppData%Windows浏览器带我到那个目录.
我无法将完整路径放入,因为每台客户端计算机上的用户不同.
在开发.NET Windows窗体应用程序时,我们可以在这些App.config标记之间进行选择以存储配置值.哪一个更好?
<configuration>
<!-- Choice 1 -->
<appSettings>
<add key="RequestTimeoutInMilliseconds" value="10000"/>
</appSettings>
<!-- Choice 2 -->
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
<section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Project1.Properties.Settings>
<setting name="TABLEA" serializeAs="String">
<value>TABLEA</value>
</setting>
</Project1.Properties.Settings>
</applicationSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我有为AnyCPU编译的ac#单元测试项目.我们的构建服务器是64位机器,并安装了64位SQL Express实例.
测试项目使用类似于以下内容的代码来标识.MDF文件的路径:
private string GetExpressPath()
{
RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" );
string sqlExpressKeyName = (string) sqlServerKey.GetValue( "SQLEXPRESS" );
RegistryKey sqlInstanceSetupKey = sqlServerKey.OpenSubKey( sqlExpressKeyName + @"\Setup" );
return sqlInstanceSetupKey.GetValue( "SQLDataRoot" ).ToString();
}
Run Code Online (Sandbox Code Playgroud)
这段代码在我们的32位工作站上工作正常,并且在我最近使用NCover启用代码覆盖率分析之前,在构建服务器上工作正常.因为NCover使用32位COM组件,所以测试运行器(Gallio)作为32位进程运行.
检查注册表,下面没有"实例名称"键
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
在32位模式下运行的应用程序是否有办法访问Wow6432Node外部的注册表?
这可能听起来太琐事了,而且我做了与文章中建议的相同的事情,但它没有按预期工作.希望有人能指出我正确的方向.
我想保存每个AppSettings的用户设置.
一旦Winform关闭,我触发:
conf.Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (ConfigurationManager.AppSettings["IntegrateWithPerforce"] != null)
ConfigurationManager.AppSettings["IntegrateWithPerforce"] =
e.Payload.IntegrateCheckBox.ToString();
else
config.AppSettings.Settings.Add("IntegrateWithPerforce",
e.Payload.IntegrateCheckBox.ToString());
config.Save(ConfigurationSaveMode.Modified);
Run Code Online (Sandbox Code Playgroud)
因此,当条目第一次不存在时,它只会创建它,否则它将修改现有条目.然而,这并不节省.
1)我做错了什么?
2)我希望在哪里再次保存应用程序设置的用户设置?是在Debug文件夹中还是在C:\ Documents and Settings\USERNAME\Local Settings\Application Data文件夹中?
首先,我的主要目的是动态地为我的应用程序设置IP和端口.
我正在使用IConfiguration注入一个json配置文件,就像一些教程提到的那样.
但是,我无法在Program.cs中检索配置,因为我WebHostBuilder将同时使用StartUp和Url.
所以在主机建立时,我的配置中没有任何内容.
WebProtocolSettings settings_Web = new WebProtocolSettings();
var host = new WebHostBuilder()
.UseIISIntegration()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls(settings_Web.Url + ":" + settings_Web.Port)
.Build();
Run Code Online (Sandbox Code Playgroud)
在Startup.cs中
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
public void ConfigureServices(IServiceCollection services)
{
// Adds services required for using options.
services.AddOptions();
var _WebProtocolSettings = Configuration.GetSection("WebProtocolSettings");
// Register the …Run Code Online (Sandbox Code Playgroud) 我有一个需要极少持久存储的应用程序.实际上,我们谈论的是<30个整数.所有应用程序的需求是在下次启动时知道那些整数(并且整数在运行时会发生变化).
数据库对此来说太过分了,但我并不特别想要使用文本文件.
C#是否有任何机制可以在运行之间保持这样的小值?我注意到你可以将东西存储在资源文件和其他一些地方 - 我不知道你是否可以在运行时更改它们.我刚刚学习C#和.NET来完成一份新工作,所以如果这是一个愚蠢的问题,请道歉!
我目前正在使用asp.net core v1.1开发项目,在我的appsettings.json中我有:
"AppSettings": {
"AzureConnectionKey": "***",
"AzureContainerName": "**",
"NumberOfTicks": 621355968000000000,
"NumberOfMiliseconds": 10000,
"SelectedPvInstalationIds": [ 13, 137, 126, 121, 68, 29 ],
"MaxPvPower": 160,
"MaxWindPower": 5745.35
},
Run Code Online (Sandbox Code Playgroud)
我也有用来存储它们的类:
public class AppSettings
{
public string AzureConnectionKey { get; set; }
public string AzureContainerName { get; set; }
public long NumberOfTicks { get; set; }
public long NumberOfMiliseconds { get; set; }
public int[] SelectedPvInstalationIds { get; set; }
public decimal MaxPvPower { get; set; }
public decimal MaxWindPower { get; set; …Run Code Online (Sandbox Code Playgroud) 如果它们无法从默认值改变,它们有什么用?修辞问题.
首先,绕过设置系统并直接写入应用程序范围设置文件的最佳方法是什么(下一段中的安全问题)?的XmlReader/XmlWriter的?
IIRC,如果应用程序试图写入其Program Files文件夹,Windows Vista和7会做一些魔术来防止这种情况发生.我想我需要调用UAC进行提升,我必须在我的应用程序的"选项"窗口的"确定"按钮上添加该花式盾牌图标,依此类推.链接到快速操作方法?
或者,您可以告诉我,我正在尝试做的是愚蠢的,我应该将我可变的应用程序范围设置存储在其他地方.
我正在寻找一种方法来存储可以使用应用程序设置在运行时写入的应用程序或机器级别设置.用户设置允许读/写,但应用程序设置不允许.我一直在使用用户设置在运行时保存这样的设置,但由于以下原因,这已被证明是不切实际的:
我们公司的机器仅供一个用户使用,因此通常不需要用户特定的设置.
否则我真的很喜欢使用应用程序设置,并希望尽可能继续使用它们.如果设置可以与EXE位于同一个文件夹中(比如曾经做过的好的'ini文件),那将是理想的选择.
注意:这是一个WPF应用程序,而不是ASP.net Web应用程序,所以没有web.config.
我正在尝试为多种语言本地化WinForms应用程序.我正在尝试找到一种方法来设置我的表单标签/按钮文本属性,以便从设计器中的资源文件中读取(而不是必须维护一段以编程方式设置它们的代码).
我发现我可以设置form.Localizable = true,但是然后从表单旁边的文件中读取资源,但是我的许多资源在多个表单中共享.
有没有办法在设计器中将标签的文本设置为存储在项目级resx文件中的值?
c# ×8
.net ×7
appsettings ×3
app-config ×2
asp.net-core ×2
settings ×2
wpf ×2
.net-core ×1
32-bit ×1
64-bit ×1
json ×1
path ×1
registry ×1
resources ×1
uac ×1
web-config ×1
winforms ×1