khắc phục 61850
báo lỗi The namespace 'sql_Connect' already contains a definition for 'DeviceKeyHelper' Type 'DeviceKeyHelper' already defines a member called 'GetDeviceDir' with the same parameter types Type 'DeviceKeyHelper' already defines a member called 'MakeKey' with the same parameter types Type 'DeviceKeyHelper' already defines a member call
ed 'SanitizeInstanceId' with the same parameter types. nguyên nhân do đâu lỗi và cách khắc phục
RuntimeMoveEditor
nhưng code cũ vẫn gọi:
TagRuntimeMoveEditor.Enable(...);
thì sẽ sinh đúng lỗi này.
Trường hợp 4 — Class nằm trong file nhưng bị #if
Ví dụ:
#if DEBUG public class TagRuntimeMoveEditor { } #endif
Nếu cấu hình Build hiện tại không thỏa điều kiện thì compiler cũng không nhìn thấy class.
Đặc biệt với SCADA của bạn
Vì trước đây bạn đang làm runtime chỉnh vị trí X/Y của object rồi lưu lại khi đóng .exe, TagRuntimeMoveEditor rất có thể là class trung gian xử lý:
MouseDown ↓ kéo object ↓ thay đổi X/Y ↓ MouseUp ↓ lưu vị trí ↓ mở Runtime lần sau → đọc lại X/Y
Nếu bạn vừa copy/sửa code TagSwitchPulse, TagButton, Motor... thì có thể code của một control đang gọi TagRuntimeMoveEditor nhưng chưa copy class hỗ trợ này sang project mới.
Cách kiểm tra nhanh nhất
Trong Visual Studio nhấn:
Ctrl + Shift + F → tìm
TagRuntimeMoveEditor
Nếu kết quả chỉ ra kiểu:
TagRuntimeMoveEditor.xxx(...)
nhưng không có:
class TagRuntimeMoveEditor
thì bạn đang thiếu file/class.
Nếu bạn gửi cho tôi file .cs đang báo lỗi (hoặc ảnh dòng lỗi), tôi có thể chỉ chính xác dòng nào đang gọi TagRuntimeMoveEditor và sửa trực tiếp code để chạy được.
Đúng, lỗi này đã rõ hơn: Windows đang chặn quyền ghi vào thư mục F:\Program Files\..., không còn là lỗi của C# hay Visual Studio.
Dòng quan trọng nhất là:
Unable to create directory "obj\Debug\" Access to the path 'F:\Program Files\8-V6\1-OCC\Visual_Export\sql_Connect\obj\Debug\' is denied.
Visual Studio cần tạo:
sql_Connect └─ obj └─ Debug
nhưng tài khoản hiện tại không có quyền Write/Create folder ở F:\Program Files.
Cách xử lý tôi khuyên dùng
Đừng để project C# ở F:\Program Files\... nữa.
Chuyển nguyên project:
F:\Program Files\8-V6\1-OCC\Visual_Export\sql_Connect
sang chẳng hạn:
F:\SCADA\Visual_Export\sql_Connect
hoặc:
F:\CSharp\sql_Connect
Sau đó:
- Đóng Visual Studio.
-
Copy nguyên thư mục
sql_Connect. -
Xóa
binvàobjở project mới. - Mở file:
sql_Connect.sln
- Chọn:
Build → Rebuild Solution
Nếu bắt buộc phải giữ ở Program Files
Chuột phải vào:
F:\Program Files\8-V6\1-OCC\Visual_Export\sql_Connect
→ Properties → Security → Edit
Chọn tài khoản Windows của bạn và cho phép:
Modify Write Read & execute
Sau đó thử Build lại.
Hoặc mở Visual Studio bằng:
Run as administrator
Nếu chạy được khi Administrator thì gần như chắc chắn 100% là vấn đề quyền thư mục.
Có một điểm rất đáng chú ý
Trước đó bạn có lỗi:
obj\Debug\sql_Connect.csproj.CoreCompileInputs.cache Access denied
bây giờ chuyển thành:
Unable to create directory "obj\Debug\"
Điều này cho thấy không phải một file .d5d~ nào đó bị khóa đơn lẻ nữa. Hiện tại ngay cả việc tạo thư mục obj\Debug cũng bị Windows từ chối.
Vì vậy xóa obj thôi chưa đủ. Tôi sẽ ưu tiên chuyển project ra khỏi Program Files.
Nếu đây là project bạn vừa copy từ máy cũ sang máy mới, thì cách sạch nhất là:
F:\Program Files\8-V6\1-OCC\Visual_Export\sql_Connect ↓ F:\SCADA\sql_Connect ↓ xóa bin + obj ↓ mở .sln ↓ Rebuild
Sau khi làm như trên, lỗi WriteLinesToFile / UnauthorizedAccessException này sẽ không còn nếu không có một cơ chế quyền khác đang chặn thư mục.

