在 Visual Studio 中为 C# 更新 App.Config 文件的最佳方法是啥? [复制]
Posted
技术标签:
【中文标题】在 Visual Studio 中为 C# 更新 App.Config 文件的最佳方法是啥? [复制]【英文标题】:What is the best way to update an App.Config file for C# in Visual Studio? [duplicate]在 Visual Studio 中为 C# 更新 App.Config 文件的最佳方法是什么? [复制] 【发布时间】:2020-03-17 19:42:03 【问题描述】:我一直在使用 Visual Studio 2019 在 C# 中进行文件转换项目。有人要求我修改我的代码,以便将任何文件路径替换为通过 App.Config 文件调用的变量。我是这种方法的新手,因为我以前从未被教过如何做到这一点。如果有人可以提供帮助,我正在寻找一些指导或示例。我已经尝试过任何相关的文章或视频,但仍在苦苦挣扎。我的代码如下。我已将所有服务/数据库名称更新为通用名称。提前致谢。
class Program
static void Main(string[] args)
string fromPath = string.Empty;
string toPath = string.Empty;
// set path where the source xls file is
string sourcePath = @"\\server\Data\subfolder\subfolder2\";
// determine target filename from today's date
string sourceFile = DateTime.Now.ToString("MM.dd.yy") + ".xls";
// determine if the target file exists
fromPath = sourcePath + sourceFile; // gives us the full path and filename to open
if (System.IO.File.Exists(fromPath))
// file exists, so process it
// make our output file
toPath = sourcePath + "import.csv";
// do the conversion to csv
CsvHelper csv = new CsvHelper();
csv.XlsToCsv(fromPath, toPath);
// renames one column to say 'idn_prod1'
var file1 = @"\\server\Data\subfolder\subfolder2\import.csv";
var lines = System.IO.File.ReadAllLines(file1);
var columnHeaders = lines[0];
var textToReplace = "idn_prod";
var newText = "idn_prod1";
var indexToReplace = columnHeaders
.LastIndexOf("idn_prod");//LastIndex ensures that you pick the second idn_prod
columnHeaders = columnHeaders
.Remove(indexToReplace, textToReplace.Length)
.Insert(indexToReplace, newText);//removes the second idn_prod and replaces it with the updated value.
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(file1))
sw.WriteLine(columnHeaders);
foreach (var str in lines.Skip(1))
sw.WriteLine(str);
sw.Flush();
// archive xls file to prevent buildup in this directory
if (Directory.Exists(@"\\server\Data\subfolder\subfolder2\"))
foreach (var file in new DirectoryInfo(@"C:\Users\myName\Documents\Projects\").GetFiles())
file.MoveTo($@" @"\\server\Data\subfolder\subfolder2\Archive"\file.Name");
//Move data in CSV file to a DataTable
private static System.Data.DataTable GetDataTabletFromCSVFile(string csv_file_path = @"\\server\Data\subfolder\subfolder2\import.csv")
System.Data.DataTable csvData = new System.Data.DataTable();
try
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
csvReader.SetDelimiters(new string[] "," );
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
while (!csvReader.EndOfData)
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
if (fieldData[i] == "")
fieldData[i] = null;
csvData.Rows.Add(fieldData);
catch (Exception ex)
return null;
return csvData;
//import DataTable into Server and database table
static void InsertDataIntoSQLServerUsingSQLBulkCopy(System.Data.DataTable csvFileData)
using (SqlConnection dbConnection = new SqlConnection("Data Source=server;Initial Catalog=Database;Integrated Security=SSPI;"))
dbConnection.Open();
using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
s.DestinationTableName = "Table";
foreach (var column in csvFileData.Columns)
s.ColumnMappings.Add(column.ToString(), column.ToString());
s.WriteToServer(csvFileData);
下面是我目前的 App.Config。很抱歉之前的问题。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.5.2" />
</startup>
<appSettings>
<!-- Name of the application-->
<add key="ApplicationName" value="xlsTocsv"/>
<!-- Archive directory for XLS files-->
<add key="MoveTo"
value="@\\server\Data\subfolder\subfolder2\Archive"/>
<!-- Server Name for import-->
<add key="Data Source" value="Server"/>
</appSettings>
</configuration>
【问题讨论】:
您说您看过视频和文章,但仍在苦苦挣扎,但您没有提及原因。如果您没有确切地告诉我们您遇到了什么问题,我们可能会尝试在此处复制您已经查看过的所有内容,但仍然无法改善您的情况。 如果您尝试过某些东西,请发布您尝试过的代码并指出您遇到的问题。然后我们可以提供帮助。在您发布的代码中,我没有看到App.config
在任何地方使用。
您在这里遇到的具体问题是什么?
***.com/questions/1189364/…
@itsme86 - 抱歉,我很挣扎,因为我不确定更新我的 App.Config 的最佳方式,所以在实际程序中事情看起来并不那么硬编码。
【参考方案1】:
在 Visual Studio 中:
-
右键单击您的项目,
选择添加->新建项目。
在搜索框中,输入“配置”。
选择“应用程序配置项”。这会将样板 XML 文件添加到名为“App.config”的项目中
添加一个
<appSettings></appSettings>
元素作为主<configuration>
节点的直接子节点
在 appSetting 元素中,创建如下所示的子元素:
<add key="someKey" value ="Some value as a string, it could be a number, or whatever"/>
-
如果没有,请在您的项目中添加对 System.Configuration 的引用。
在您要访问应用设置的每个文件中,将using System.Configuration;
添加到文件顶部。
要获取设置,请使用如下代码:
var someKeySetting = ConfigurationManager.AppSettings["someKey"];
此时,someKeySetting
将是一个字符串,其中包含您在配置文件中提供的设置。如果配置文件中不存在该设置,则someKeySetting
将是null
。如果您想使用数字、日期或枚举,则必须解析生成的字符串(最好使用适当的 TryParse
调用。
【讨论】:
【参考方案2】:您将希望将您的值放入 app.config
文件中,就像这样
<configuration> //this is probably already in your app.config file
<appSettings>
<add key="variable1Name" value="/mypathgoeshere/example" />
....
</appSettings>
</configuration>
要访问这些变量,您需要这些
命名空间:System.Configuration
程序集:System.Configuration.dll, System.Configuration.ConfigurationManager.dll
然后在你的文件中你想像这样访问它。
using System.Configuration;
public class Program
public static void Main()
string configvalue1 = ConfigurationManager.AppSettings["variable1Name"];
//returns the value of "/mypathgoeshere/example"
【讨论】:
谢谢!这绝对有帮助。 不客气,很高兴它有帮助。以上是关于在 Visual Studio 中为 C# 更新 App.Config 文件的最佳方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在具有多个子项目的 Visual Studio 中为 C# 解决方案设置通用值(抽象)?
如何在 Visual Studio 2019 中为 C# WPF 切换 XAML 中的行注释
在 Visual Studio 2010 C++ 中为 /// 生成 XML 文档注释
如何在 Visual Studio 2017 中为 Linux 应用启用多线程