这是一个标准方案:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Run Code Online (Sandbox Code Playgroud)
问题是,我不完全确定应该是哪个例外SomeStandardException.
我仔细阅读了3.5框架,发现了两个可能的候选人:ConfigurationException和ConfigurationErrorsException.
System.Configuration.ConfigurationException
发生配置系统错误时引发的异常.
备注
该ConfigurationException如果应用程序试图读取或写入数据到配置文件,但不成功则抛出异常.可能的原因可能包括配置文件中格式错误的XML,文件权限问题以及值无效的配置属性.注意:
ConfigurationException维护该对象是为了向后兼容.该ConfigurationErrorsException对象替换配置系统.
这个例外实际上听起来非常适合我所需要的,但它已被标记为过时,所以,ixnay on atthay.
这让我们彻底迷惑ConfigurationErrorsException:
System.Configuration.ConfigurationErrorsException
当前值不是EnableSessionState值之一.
如您所见,其文档完全没用.(在本地和在线帮助中都是如此.)对课程本身的检查表明,对于我想要的东西来说,这是一种极端的过度杀伤力.
简而言之,我需要一个标准异常,当应用程序配置设置丢失或包含无效值时应抛出该异常.你认为框架有一个例外,它允许应用程序使用它.(它显然没有,但它被标记为已过时,并且被替换的东西多范围较大.)
你们有什么解决方案,如果有的话,我们将不得不将其吸收并为此推出自己的例外情况?
有些人问我是否可以提供默认值,然后继续.在某些情况下,是的,在这些情况下,不会抛出异常.但是,对于某些设置,这将不适用.例如:数据库服务器名称和凭据,身份验证服务器以及安装的第三方应用程序的路径.
还值得注意的是,我主要处理的应用程序是以批处理模式运行的控制台应用程序,我希望它抛出一个由main方法捕获的异常,并在没有正确配置的情况下正确记录.(这是我继承的遗留代码,目前只是假设一切都很好.)
当使用Spring 3.0功能来注释计划任务时,我想fixedDelay从配置文件中设置as参数,而不是将其硬连接到我的任务类中,就像当前...
@Scheduled(fixedDelay = 5000)
public void readLog() {
...
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用Spring表达式语言(SpEL)的方法似乎@Value返回一个String对象,而该对象又无法按fixedDelay参数的要求自动装入长值.
我知道我可以使用静态ConfigurationManager.OpenExe(exePath)方法打开与程序集相关的配置文件,但我只想打开与程序集无关的配置.只是一个标准的.NET配置文件.
我一直在使用log4j已经有一段时间了,我通常在log4j.xml的顶部使用它(可能就像许多其他人一样,根据谷歌这是这样做的方式):
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Run Code Online (Sandbox Code Playgroud)
显然这是有效的,但Eclipse并没有为编写XML提供其上下文相关的帮助.此外,它总是显示一个警告,它没有找到log4j.dtd.现在我很好奇如何解决这个问题.
我尝试了一些事情,这些工作:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:/path/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
Run Code Online (Sandbox Code Playgroud)
从上面可以看出我们正在使用Maven.因此,我试过这个,但它失败了:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:${M2_REPO}/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
Run Code Online (Sandbox Code Playgroud)
Eclipse通常知道如何处理类路径变量,但为什么这不起作用?我知道引用在运行时不起作用,但也不是简单的log4j.dtd(如果我没有错),所以这不应该是一个问题.
任何人都可以对此有所了解吗?
我有一个包含MSTest集成测试的dll类型项目.在我的机器上测试通过,我希望在CI服务器上发生同样的事情(我使用TeamCity).但是测试失败了,因为我需要在app.config中调整一些设置.这就是为什么我想要一个单独的第二个app.config文件来保存CI服务器的设置.
所以我想拥有
/Sln /Proj app.config (I think this is required by VS) app.Release.config (This is a standalone independent config file)
因此,如果我在CI上的构建配置中选择Release配置,我想使用app.Release.config文件而不是app.config
问题
对于简单的.dll类型项目,这似乎并不简单.对于Web项目,我可以进行Web配置转换.我找到了一个黑客如何为dll类型的项目进行这些转换,但我不是黑客的忠实粉丝.
问题
根据.NET项目的构建配置(例如Debug,Release,...)调整app.config文件的标准方法是什么?
.net configuration continuous-integration release-management visual-studio
我正在运行Windows XP 32位
我刚刚从以下URL下载了Openssl并安装了它. http://www.slproweb.com/products/Win32OpenSSL.html
然后我尝试使用以下命令创建自签名证书
openssl req -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem
Run Code Online (Sandbox Code Playgroud)
然后它开始给出以下错误
无法从/usr/local/ssl/openssl.cnf加载配置信息
然后谷歌搜索后我改变了上面的命令
openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem
Run Code Online (Sandbox Code Playgroud)
但现在我在命令提示符中收到以下错误
C:\ OpenSSL\bin\openssl.conf的第-1行错误
4220:错误:02001002:系统库:fopen:没有这样的文件或目录:.\ crypto\bio\bss_file.c:126:fopen('C:\OpenSSL\bin\openssl.conf','rb')4220:错误:2006D080:BIO例程:BIO_new_file:没有这样的文件:.\ crypto\bio\bss_file.c:129:
4220:错误:0E078072:配置文件例程:DEF_LOAD:没有这样的文件:.\ crypto\conf\conf_def.c:197:
请帮忙.提前致谢.
我有PyCharm 1.5.4并使用"Open Directory"选项打开IDE中文件夹的内容.
我选择了Python 3.2版(它显示在"外部库"节点下).
我如何选择另一个版本的Python(我已经在我的机器上安装),以便PyCharm使用该版本?
我刚刚使用我的Ubuntu 10.10服务器上http://redis.io/topics/quickstart上的快速入门指南中的说明成功安装了Redis .我正在以dameon运行服务(因此可以通过init.d运行)
该服务器是具有内部和外部IP的Rackspace Cluster的一部分.主机在端口6379上运行(Redis的标准)
我在iptables中添加了一行以允许来自端口6379的传入连接,如下所示:
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
Run Code Online (Sandbox Code Playgroud)
在我在另一台服务器上的PHP代码中,我正在尝试连接到新的Redis服务器:
$this->load->helper("iredis");
$hostname = "IP ADDRESS HERE";
$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Run Code Online (Sandbox Code Playgroud)
一旦我这样做 - 我总是拒绝连接.在我的redis.conf文件中,我将本地绑定命令注释掉,因此它应该监听的不仅仅是本地主机IP.我可以连接到本地计算机上的数据库,而不是在另一台服务器上.我已经尝试过外部和内部IP而没有运气.
有关使此工作的任何建议?
如何在Core 2.0中的ConfigurationBuilder中设置基本路径.
我用Google搜索,发现这个问题,这个来自微软的文档,以及2.0文档在线,但他们似乎使用的版本Microsoft.Extension.Configuration从1.0.0-beta8.
我想读appsettings.json.在Core 2.0中有没有新的方法?
using System;
using System.IO;
using Microsoft.Extensions.Configuration;
namespace ConsoleApp2
{
class Program
{
public static IConfigurationRoot Configuration { get; set; }
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) // <== compile failing here
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
Console.WriteLine(Configuration.GetConnectionString("con"));
Console.WriteLine("Press a key...");
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
appsetting.json
{
"ConnectionStrings": {
"con": "connection string"
}
}
Run Code Online (Sandbox Code Playgroud)
更新: 除了添加Microsoft.Extensions.Configuration.FileExtensions如下图所示的设置我还需要添加 …
是否可以在Java属性文件的下一行继续长字符串?
例如,不知何故
myStr=Hello
World
Run Code Online (Sandbox Code Playgroud)
当我得到getProperty("myStr")它将返回"Hello World"?
configuration ×10
.net ×2
c# ×2
java ×2
.net-core ×1
annotations ×1
asp.net-core ×1
eclipse ×1
exception ×1
log4j ×1
openssl ×1
properties ×1
pycharm ×1
python ×1
redis ×1
scheduling ×1
spring ×1
ubuntu ×1
windows ×1
xml ×1