C# 使用UserControl WinForms部署.json文件

C# 使用UserControl WinForms部署.json文件,c#,user-controls,C#,User Controls,我在VisualStudio中构建了一个自定义用户控件(WinForms) 此用户控件需要部署一个.json文件 简短版本:这怎么可能 长版本: 当我使用控件设计器本身测试用户控件时,它不会出现问题。 这是因为我设置了以下内容: 建立行动以满足内容和需求; 复制到输出目录-如果较新,则复制 所以,当我调试它时,一切都在那里,正如我所期望的那样 当我创建一个单独的Win Forms应用程序,并通过以下方式将此新设计的控件添加到调色板时,就会出现问题: 右键单击工具箱->选择项->浏览->浏览到控件

我在VisualStudio中构建了一个自定义用户控件(WinForms)

此用户控件需要部署一个.json文件

简短版本:这怎么可能

长版本: 当我使用控件设计器本身测试用户控件时,它不会出现问题。 这是因为我设置了以下内容:

建立行动以满足内容和需求; 复制到输出目录-如果较新,则复制

所以,当我调试它时,一切都在那里,正如我所期望的那样

当我创建一个单独的Win Forms应用程序,并通过以下方式将此新设计的控件添加到调色板时,就会出现问题:

右键单击工具箱->选择项->浏览->浏览到控件的项目目录->选择DLL->确定

它显示在我的调色板上,但问题当然是当我将用户控件放到表单本身时。它无法将“MyFile.json”从用户控件应用程序/Dll获取到当前项目

我该怎么做


Chud

一个简单的方法是将json文件构建为
嵌入式资源
,而不是
内容
。这样,它将被嵌入到UserControl的二进制文件(dll文件本身)中。然后可以使用
ResourceManager
类在代码中读取它

如果要在运行时更改json文件的内容,可以改为创建一个
string
type的应用程序设置来存储实际的json内容。然后可以使用
ProjectName.Properties.Settings.Default.YourSettingName
轻松读取/写入此设置

还请注意,如果您已将json文件的构建操作设置为
Content
,并将
Copy to Output Directory
设置为
Always Copy
,并且您从该解决方案中也存在的另一个项目添加对此项目的引用,则内容文件(json文件)应正确复制到bin文件夹。但是,如果当前解决方案中不存在您的UserControl项目,或者您正在通过浏览按钮引用您的控件,您将无法获取内容文件。这可能看起来不明显,但一旦您考虑它,您就会明白,如果您只添加一个文件引用,VS无法确定DLL文件具有哪些依赖项


在后一种情况下,设置是您可以使用的最便宜的解决方案(如上所述)。

一种简单的方法是将json文件构建为
嵌入式资源,而不是
内容。这样,它将被嵌入到UserControl的二进制文件(dll文件本身)中。然后可以使用
ResourceManager
类在代码中读取它

如果要在运行时更改json文件的内容,可以改为创建一个
string
type的应用程序设置来存储实际的json内容。然后可以使用
ProjectName.Properties.Settings.Default.YourSettingName
轻松读取/写入此设置

还请注意,如果您已将json文件的构建操作设置为
Content
,并将
Copy to Output Directory
设置为
Always Copy
,并且您从该解决方案中也存在的另一个项目添加对此项目的引用,则内容文件(json文件)应正确复制到bin文件夹。但是,如果当前解决方案中不存在您的UserControl项目,或者您正在通过浏览按钮引用您的控件,您将无法获取内容文件。这可能看起来不明显,但一旦您考虑它,您就会明白,如果您只添加一个文件引用,VS无法确定DLL文件具有哪些依赖项


在后一种情况下,设置是您可以使用的最便宜的解决方案(如上所述)。

好的-我刚刚尝试过,同样的方法也适用。当我放下控件时,我得到了“文件不存在”的自定义消息。要编辑-是-我将根据用户选择更改内容。它可能在部署时为空,并由用户更改。但是,我希望UserControl能够处理文件的创建/部署,而应用程序设置在这种情况下应该可以很好地工作。你有什么问题吗?好吧,我刚试过,同样的道理也适用。当我放下控件时,我得到了“文件不存在”的自定义消息。要编辑-是-我将根据用户选择更改内容。它可能在部署时为空,并由用户更改。但是,我希望UserControl能够处理文件的创建/部署,而应用程序设置在这种情况下应该可以很好地工作。你对此有什么意见吗?