Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visual Studio 2008关于更改设计器生成的代码的警告_C#_Visual Studio 2008_Designer_Visual Studio Designer - Fatal编程技术网

C# Visual Studio 2008关于更改设计器生成的代码的警告

C# Visual Studio 2008关于更改设计器生成的代码的警告,c#,visual-studio-2008,designer,visual-studio-designer,C#,Visual Studio 2008,Designer,Visual Studio Designer,这个问题有点离奇,但对我来说仍然很有趣;我想知道为什么Visual Studio 2008不喜欢使用以下常量: 如有任何意见,将不胜感激。事先非常感谢。它实际上告诉了你。该代码由设计器生成。设计师需要它保持原样。不要更改该代码,除非您希望设计器对其执行不愉快的操作 在可视化设计器中看到的内容和它生成的代码之间存在某种平衡 您从一个空的设计图面开始,因此没有生成代码 将某个对象拖到设计图面上。设计器生成创建它所需的代码 设置该对象的属性,设计器将生成代码,按照指定设置属性 保存并关闭 您可以在设

这个问题有点离奇,但对我来说仍然很有趣;我想知道为什么Visual Studio 2008不喜欢使用以下常量:


如有任何意见,将不胜感激。事先非常感谢。

它实际上告诉了你。该代码由设计器生成。设计师需要它保持原样。不要更改该代码,除非您希望设计器对其执行不愉快的操作


在可视化设计器中看到的内容和它生成的代码之间存在某种平衡

  • 您从一个空的设计图面开始,因此没有生成代码
  • 将某个对象拖到设计图面上。设计器生成创建它所需的代码
  • 设置该对象的属性,设计器将生成代码,按照指定设置属性
  • 保存并关闭
  • 您可以在设计器中重新打开文档。设计师必须弄清楚要在设计图面上显示什么。它读取它生成的代码,因为它知道代码是自己生成的,所以它知道代码在设计图面上的含义
  • 下次发生更改或保存时,它将重新生成代码
  • 现在,假设您对生成的代码进行了一些修改。除非您以与设计师完全相同的方式进行更改,否则它将无法识别更改。您的更改不会显示在设计图面上。下次进行更改或保存时,设计器将在不进行更改的情况下重新生成代码


    因此,如果您不想丢失对生成的代码所做的更改,则不要对生成的代码进行任何更改。

    当您将代码添加到
    InitializeComponent()
    时,设计师会不高兴。请尝试以下方法:

    public Service101()
    {
        InitializeComponent();
        this.createEventSource();
    }
    
    private void InitializeComponent()
    {
        this.ServiceName = SERVICE_NAME;
        this.EventLog.Source = DISPLAY_NAME;
        this.EventLog.Log = "Application";
    }
    
    void createEventSource()
    {
        if (!EventLog.SourceExists(DISPLAY_NAME))
        {
            EventLog.CreateEventSource(DISPLAY_NAME, "Application");
        }
    }
    

    我似乎很清楚。它告诉您您已经修改了自动生成的代码,您不应该这样做


    在最坏的情况下,您可能会丢失更改。在最好的情况下,它会发现一些意外的代码,并且不会更改任何内容,这样您就不会丢失所做的更改。但它也无法理解您的代码。您应该将常量放在任何其他位置。

    有点离题,但我真的不明白您为什么要使用常量(以及公共常量)。你就不能这么做吗

    private void InitializeComponent()
    {
        this.ServiceName = "WinSvc101";
        this.EventLog.Source = "Windows Service 101";
        // ....
    }
    

    安德鲁,谢谢你的评论!现在更改后,消息将更改为:警告1变量“SERVICE_NAME”未声明或从未分配。警告2变量“DISPLAY\u NAME”未声明或从未分配。要解决此警告,我必须分别使用Service101.SERVICE\u NAME和Service101.DISPLAY\u NAME。感谢您的贡献Jaime!嗨,丹,非常感谢你的评论。为了回答您的问题,我在这里使用常量,因为我想保证serviceInstaller.ServiceName属性始终与Service101.ServiceName匹配的条件。如果你知道一个更好的方法来实现这一点,请不要犹豫发表评论!它们基本上是公共的,因为我也需要在其他类中使用它们。你可以使用内部的,而不是公共的,这样它们在你的类中是可以访问的,但在外部是不能访问的。当我编写服务时,我通常会将配置值存储在特殊的app.config文件中,然后在服务启动时将其读入静态内部属性。然后,这些属性可供类访问,但不会公开。当然,可能还有更好的办法——我不是专家!祝你好运有关app.config,请参阅:articles/64871.aspx非常感谢您的评论!我已经用内部修饰符修改了评论。这很好,但对解决任何问题都没有帮助。根本原因问题实际上是设计器实际运行和看到了什么。我刚刚打开了一些旧代码,这些代码正在从配置文件加载和填充一些UI字段,“设计器”似乎甚至看不到或在窗体自身的私有空间上运行非常量赋值。@ZXX:关键是设计器创建了该代码,而设计器使用该代码做它想做的事情-不要碰它,除非你是设计师,但现实生活中你必须这样做。人们问这样的问题是希望了解一些合理可行的机制,所以“尊敬你的主”并没有真正的帮助。如果设计师真的搞砸了一些东西,人们总是可以备份和区分,但在设计师拒绝加载之前,人们需要知道他可以更改多少,这样你们才能看到一个可视的通信。看起来有一个自定义序列化程序。我看到new-s甚至数组赋值,但不是静态赋值,或者可能只是CLR的静态赋值,或者可能是引用的dll-s中的对象,但不是当前版本中的对象…@ZXX:Microsoft已经记录了您可以对设计器生成的代码进行的一组“合理更改”。这一套是空的。如果您发现自己需要更改生成的代码,那么您就做错了,应该寻求帮助。永远不要更改生成的代码。分部类会帮助你吗?如果我的文档是我的极限,我仍然会锁定哈希表:-)现实存在,它说我正在与一个新winforms的人的代码混为一谈,所以他没有使用一个蹩脚的“设计器”,并做了一些事情来阻止它:-)但我这样做,因为我是一个需要快速修复的后端开发人员。备份和扩散对我来说是很自然的,我需要在短时间内掌握尽可能多的灰色区域信息。每次我接触那个代码时,我都会失去性能,所以无论如何我都会恢复大部分更改。实际上,你可以在
    public Service101()
    {
        InitializeComponent();
        this.createEventSource();
    }
    
    private void InitializeComponent()
    {
        this.ServiceName = SERVICE_NAME;
        this.EventLog.Source = DISPLAY_NAME;
        this.EventLog.Log = "Application";
    }
    
    void createEventSource()
    {
        if (!EventLog.SourceExists(DISPLAY_NAME))
        {
            EventLog.CreateEventSource(DISPLAY_NAME, "Application");
        }
    }
    
    private void InitializeComponent()
    {
        this.ServiceName = "WinSvc101";
        this.EventLog.Source = "Windows Service 101";
        // ....
    }