Tag Archive เวอร์ชั่น

C#: Error CS0579 Duplicate ‘System.Reflection.AssemblyCompanyAttribute’

เขียน c# อยู่ๆเจอ error Error CS0579 จริงๆ ไม่ใช่อยู่ๆ หรอก ทุกอย่างมันมีเหตุปัจจัยมันถึงแจ้ง error มาให้ดู โดยที่เจอคือ

  • Error CS0579 Duplicate ‘System.Reflection.AssemblyConfigurationAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyConfigurationAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyFileVersionAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyProductAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyTitleAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyVersionAttribute’

ดูโดยรวมแล้วมันคือไฟล์ที่บันทึกเวอร์ชั่นของโปรเจคที่เราได้เขียนเอาไว้ สาเหตุก็น่าจะง่ายๆ ไปแก้ไขมันแล้วพังนั่นเอง แต่ไม่น่าพังนะ ก็ไปแก้ตามวิธีปกติเองนี่น่า ไปไล่ๆ ดูจนพบวิธีแก้ คือ

  1. ไปที่โฟลเดอร์ของ project ที่มีปัญหา
  2. ค้นหาไฟล์ *.Assemblyinfo.cs
  3. จะเห็นว่ามันมีไฟล์ตัวนี้อยู่ 5 ตัวเลย ลบทิ้งทั้งหมด
  4. ลอง clearn แล้ว run project ดูใหม่ ถ้ายัง error ไปบรรทัดที่มันเตือนอยู่แล้วลบทิ้งไปเลย

Cr. Duplicate AssemblyVersion Attribute

C#: แสดง program version

โปรแกรมถ้าหากมีแก้ไขกันหลายๆ ครั้ง ก็ควรจะแสดงให้เห็นได้ง่าย ๆ ว่า user ใช้ version ไหนอยู่ จะได้ง่ายในการดูแล

การใส่ version ใน .Net จะเรียกว่า set assembly ทำได้ง่าย ๆ โดย

  1. ไปที่ Solution Explorer (ขวามือ)
  2. คลิกขวาตรง Project File (ใต้คำว่า Solution) เลือก Properties
  3. กรอกข้อมูล Assembly Name
  4. คลิก Assembly Information…
  5. ใส่เลข Assembly version: และข้อมูลอื่น ๆ

จากนั้นแก้ form ที่ต้องการให้แสดงเวอร์ชั่น โดยแทรก

AssemblyName thisAssemName = this.GetType().Assembly.GetName();
this.Text = thisAssemName.Name + " Version " + thisAssemName.Version;

เช่น FormMain.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrototypeCSharp
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();

            AssemblyName thisAssemName = this.GetType().Assembly.GetName();

            this.Text = thisAssemName.Name + " Version " + thisAssemName.Version;

        }
    }
}

เพิ่มเติม ถ้าต้องการแสดง environment ที่โปรแกรมกำลังใช้อยู่อาจจะเพิ่ม configurations ตามวิธี C#: Configurations ก็อาจจะแก้เป็น

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrototypeCSharp
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();

            AssemblyName thisAssemName = this.GetType().Assembly.GetName();

            if (Configurations.environment == "PRODUCTION")
            {
                this.Text = thisAssemName.Name + " Version " + thisAssemName.Version;
            }
            else
            {
                this.Text = thisAssemName.Name + " Version " + thisAssemName.Version + " " + Configurations.environment;
            }
        }
    }
}

อ่านเพิ่มเติม

การติดตั้ง PHP หลายเวอร์ชั่น บน IIS

การติดตั้ง PHP หลายๆ เวอร์ชั่นบน IIS หรือการติดตั้ง UAT และ production server อยู่ในเครื่องเดียวกัน สามารถทำได้โดยใช้ Handler Mappings

การตั้งค่า Handler Mappings

  1. เปิดโปรแกรม Internet Information Services (IIS) Manager
  2. คลิกที่ site ที่ต้องการ, folder ที่จะให้สามารถ run PHP ได้ หรือที่ชื่อ server ถ้าต้องการให้ ทุก site สามารถ run PHP ได้
  3. คลิก Handler Mappings
    Request path:
    *.php
    Module:
    FastCgiModule ถ้าไม่มีให้เลือก GGI เพิ่มในตัวเลือกการติดตั้ง IIS หรืออ่าน note ในหน้า Using FastCGI to Host PHP Applications on IIS 7
    Executable:
    ใส่ path ชี้ไปที่ php-cgi.exe เช่น C:\Program Files\PHP\v7.2\php-cgi.exe อย่าลืมเปลี่ยนช่องด้านหลังจาก *.dll เป็น *.exe ด้วย
    Name:
    เช่น PHP_via_FastCGI 7.2
  4. คลิก OK
  5. ตอบ Yes
  6. (ไม่จำเป็น) คลิกที่ site หรือ server แล้ว restart
  7. Test

docker: image tag version

การสร้าง docker container วิธีต่างๆ จะเห็นคำว่า tag อยู่ในทุกคำสั่ง เช่น

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

ที่เวลาใช้จะพิมย์ เป็น

docker pull php:7.1.10-fpm

ตอนแรกผมเข้าใจว่ามันคือ keyword ไว้อธิบายว่า container ตัวนี้มันคืออะไร ทำมาจากอะไร แต่จริงๆแล้ว มันไม่ใช่ keyword ที่ไว้ค้นหา แต่ก็ไม่ได้ผิดไปนัก

การอ้างถึง image จะประกอบด้วย 2 ส่วนคือ image:version

image
image คือต้นแบบโปรแกรมที่เราใช้ เหมือนไฟล์ .iso ที่เป็นไฟล์ที่จำลองแผ่น cd / dvd ตอนเราติดตั้งโปรแกรม เราไม่ได้ใช้ไฟล์ .iso ทำงานต่างๆให้เรา image ก็เช่นกันไว้ติดตั้ง apache, mysql แต่ไม่ได้ทำงานแทนโปรแกรมพวกนั้นเป็นแค่ ต้นฉบับไว้ให้จำลองเป็น container
tag หรือ version
เป็นตัวบอกว่า ให้ติดตั้ง image version ที่เท่าไหร่ เช่น php 5.6.31 ถ้าไม่ระบุเวอร์ชั่น docker จะเลือกตัวล่าสุดหรือ :latest ให้โดยอัตโนมัติ

เราสามารถค้นหา image ได้จาก Docker Hub

บาง image จะมีหลาย repository ให้เลือกใช้ (แนวคิดเดียวกับ distro ของ linux เลย)

  • ตัวที่เป็นทางการหรือ official repository หรือ library จะมี link แบบ https://hub.docker.com/_/php/ ใช้โดยเขียน php หรือ php: ตามด้วย tag (version) ได้เลย
  • ส่วนตัวอื่นจะมี ชื่อผู้ผลิตนำหน้า เช่น https://hub.docker.com/r/appsvc/php/ เวลาใช้ก็ต้องอ้าง appsvc/php: ตามด้วย tag (version)

บาง image ยังมีหลาย version ให้เลือกอีก เช่น 7.1.10-alpine, 7.1.10-apache, 7.1.10-cli, 7.1.10-fpm ให้เลือกอีก

ถ้าเราไม่ใส่ :tag จะหมายถึง tag :latest หรือ ใหม่ที่สุดเท่าที่จะมีใน image ตัวนั้นๆ