একই প্রকল্পে সি # এবং ভিবি মিশ্রিত করা হচ্ছে


145

আপনি কি ক্লাস লাইব্রেরির জন্য একই প্রকল্পে ভিবি এবং সি # ফাইলগুলি মিশ্রণ করতে পারেন? এমন কিছু সেটিংস রয়েছে যা এটি সম্ভব করে তোলে?

আমি চেষ্টা করেছি এবং ইন্টেলিজেন্সের কোনওটিই সঠিকভাবে কাজ করে না, যদিও ব্যাকগ্রাউন্ড সংকলকটি এটি বেশ ভালভাবে পরিচালনা করতে পারে বলে মনে হচ্ছে (এই বিষয়টিকে বাদ দিয়ে যে আমি, তখন একই নামের সাথে একই নামস্থানে ২ টি ক্লাস ছিল এবং এটি অভিযোগ করেনি)।

আমরা ভিবি থেকে সি # তে রূপান্তর করার চেষ্টা করছি তবে সমস্ত কোড রূপান্তর করা শেষ হয়নি । আমার কিছু নতুন কোড লিখতে হবে, তবে এটির জন্য সত্যই কোনও নতুন প্রকল্প তৈরি করতে চাইনি।


9
আপনি যদি এখনই সি # তে রূপান্তর শেষ করেন তবে আপনি কেন ভিবিতে নতুন কোড লিখছেন?
অ্যাডাম রবিনসন

ঘটনাচক্রে, আমি ভেবেছিলাম দুটি পৃথক প্রকল্পে আংশিক ক্লাস ব্যবহার করে একটি হাইব্রিড পদ্ধতি বন্ধ করা সম্ভব হতে পারে, তবে পার্টিশালগুলি অ্যাসেমব্লিগুলি স্প্যান করতে পারে না, সুতরাং এটিও কার্যকর হবে না।
ডি ল্যামবার্ট

ডাং, এটি আমার পরবর্তী প্রচেষ্টা হবে।
ওয়েস পি

1
আমার পোস্ট স্থির। আমরা শেষ করিনি।
ওয়েস পি

10
ভিবি কোড মিশ্রিত হওয়ার অন্যতম কারণ হ'ল এর অনন্য বৈশিষ্ট্যগুলি ব্যবহার করা, বিশেষত এর এক্সএমএল ক্ষমতাগুলি যদি আপনি উদাহরণস্বরূপ লিনকিউ থেকে এক্সএমএল ব্যবহার করেন। মূলটিতে উপাদান থেকে 'লেখার পরিবর্তে সেভাবে। উপাদানগুলি ("ডেটা")' আপনি ভিবি'র ডায়নামিক এক্সএমএল সিনট্যাক্স ব্যবহার করতে পারেন: 'মূল থেকে উপাদান থেকে <ডিটা>'। এক্সএমএল ফাইলগুলির সাথে অনেক বেশি কাজ করার সময় এই সিনট্যাক্সটি সি # এর সাথে কাজ করা অনেক সহজ হতে পারে
মার্চ

উত্তর:


128

না, আপনি পারবেন না। একটি সমাবেশ / প্রকল্প (প্রতিটি প্রকল্প সাধারণত 1 টি সমাবেশে সংকলিত হয়) একটি ভাষা হতে হবে। তবে, আপনি একাধিক অ্যাসেম্বলি ব্যবহার করতে পারেন এবং প্রত্যেকটি আলাদা ভাষায় কোড করা যায় কারণ সেগুলি সমস্ত এমএসআইএল-এ সংকলিত।

এটি সূক্ষ্মভাবে সংকলন করেছে এবং অভিযোগ করেনি কারণ একটি ভিবি.এনইটি প্রকল্প কেবলমাত্র .vb ফাইলগুলি সংকলন করবে এবং একটি সি # প্রকল্প কেবলমাত্র .cs ফাইলগুলি সংকলন করবে। এটি অন্যগুলিকে উপেক্ষা করছে, সুতরাং আপনি ত্রুটিগুলি পান নি।

সম্পাদনা: আপনি যদি সি # প্রকল্পে একটি .vb ফাইল যুক্ত করেন তবে সমাধান এক্সপ্লোরার প্যানেলে ফাইলটি নির্বাচন করুন এবং তারপরে প্রোপার্টি প্যানেলটি দেখুন, আপনি লক্ষ্য করবেন যে বিল্ড অ্যাকশনটি 'সংকলন' নয়, 'সামগ্রী'। এটি একটি সাধারণ পাঠ্য ফাইল হিসাবে বিবেচিত হয় এবং বাইনারি সংস্থান হিসাবে সংকলিত সমাবেশে এম্বেড হয় না।

সম্পাদনা করুন: এসপিএন ওয়েবসাইটের সাহায্যে আপনি ভিবিএন ওয়েবসাইটে সি # ওয়েব ব্যবহারকারীর নিয়ন্ত্রণ যুক্ত করতে পারেন


1
সত্যতার পরে দুটি অ্যাসেমব্লিকে একত্রিত করার উপায় রয়েছে তবে এটি ব্যবহারকারীর সমস্যার সমাধান করবে না।
স্টিভেন সুদিত

সত্য, তবে আমি ভাষা মিশ্রণের একমাত্র উদ্দেশ্যে এটি সমর্থন করি না d
জোয়েল বি ফ্যান্ট

আমি বিশ্বাস করি আপনি একই প্রকল্পে পরিচালিত এবং নিয়ন্ত্রণহীন সি ++ মিশ্রিত করতে পারেন।
কলম রজার্স

@ সি রজার্স: এই পরিস্থিতি সম্পূর্ণ আলাদা ter আপনি চাইলে একই উত্স ফাইলে পরিচালিত এবং পরিচালনা না করা সি ++ মিক্স করতে পারেন। তবে এটি এখনও ভিবি.এনইটি এবং সি # মেশানোর মতো নয়।
জোয়েল বি ফ্যান্ট

3
@ ড্যানহোয়ার্ড: আচ্ছা, জ্বলুন। এটি অবশ্যই সেখানে একটি ব্লক, একই প্রকল্পের মধ্যে ভাষার মিশ্রণ করতে এবং মেলাতে সক্ষম হচ্ছে না!

32

ভাল, আসলে আমি এমন এক সহকর্মীর কাছ থেকে কিছু বছর আগে একটি প্রকল্প উত্তরাধিকার সূত্রে পেয়েছি যিনি একই প্রকল্পের মধ্যে ভিবি এবং সি # ওয়েবফর্মগুলি মিশ্রিত করার সিদ্ধান্ত নিয়েছিলেন। এটি কাজ করেছে তবে বজায় রাখা মজা থেকে দূরে।

আমি সিদ্ধান্ত নিয়েছি যে নতুন কোডটি সি # ক্লাস হওয়া উচিত এবং সেগুলি কাজ করতে আমাকে ওয়েবকনফাইগের সংকলনের অংশে একটি সাবনোড যুক্ত করতে হবে

        <codeSubDirectories>
            <add directoryName="VB"/>
            <add directoryName="CS"/>
        </codeSubDirectories>

সমস্ত ভিবি কোড ভিবি নামে পরিচিত অ্যাপ_কোডের একটি সাবফোল্ডার এবং সি এস কোডগুলিতে সিএস সাবফোল্ডারে যায়। এটি দুটি .dll ফাইল তৈরি করবে। এটি কাজ করে তবে কোডটি "কোডসুব ডাইরেক্টরিজ" তে তালিকাভুক্ত একই ক্রমে সংকলিত হয় এবং সুতরাং সি # এবং ভিবি উভয় ক্ষেত্রে যদি ইন্টারফেসগুলি ভিবি ফোল্ডারে থাকা উচিত।

আমার দুটিতে একটি ভিবি এবং একটি সি # সংকলকটির রেফারেন্স রয়েছে

<system.codedom>
    <compilers>

প্রকল্পটি বর্তমানে ফ্রেমওয়ার্ক 3.5 এ আপডেট করা হয়েছে এবং এটি এখনও কাজ করে (তবে এখনও বজায় রাখতে কোনও মজাদার নয়)



20

আপনি একই প্রকল্পের মধ্যে ভিবি এবং সি # মেশাতে পারবেন না - আপনি যদি ভিজ্যুয়াল স্টুডিওতে লক্ষ্য করেন তবে প্রকল্পের ফাইলগুলি হয় .vbproj বা .csproj। আপনি কোনও সমাধানের মধ্যে থাকতে পারেন - ভিবিতে 1 এবং সি # তে 1 প্রজেক্ট থাকতে পারেন।

দেখে মনে হচ্ছে এটি অনুসারে আপনি এ্যাপ_কোড ডিরেক্টরিতে ওয়েব প্রকল্পে এগুলি উভয়ই ব্যবহার করতে পারবেন:

http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx


3
ডাউনভোট কারণ প্রকল্প ফাইলটি এগুলি থেকে আপনি কোনও সমাবেশ তৈরি করতে পারবেন না। আপনি যদি চান তবে কমান্ড লাইন থেকে সংকলকটি ব্যবহার করে কোনও প্রজেক্ট ফাইল ছাড়াই অ্যাসেমবিলি সংকলন করতে পারেন। এটি কাজ না করার কারণটি হ'ল কোনও সংকলক থেকে কোনও সমাবেশ (প্রায় সবসময়) একটি সংকলনের কাজ। প্রকল্পের ফাইলের সাথে এটি করার কিছুই নেই।
টম ডব্লু

8
ভোট দিন। ব্যবহারকারীর দৃষ্টিকোণ থেকে ধারণাটি যে এক্সটেনশনটি আলাদা তা হ'ল টেলিট সাইন যে আপনি করতে পারবেন না /।
user4951

14

এটি কিছু কাস্টম এমএসবিল্ড বিকাশের দ্বারা সম্ভব হতে পারে। সরবরাহিত .টারাজেটগুলি প্রকল্পগুলিকে একক ভাষা হতে বাধ্য করে - তবে এটি প্রতিরোধ করার কোনও রানটাইম বা সরঞ্জামদানের সীমাবদ্ধতা নেই।

ভিবি এবং সিএস সংকলক উভয়ই মডিউলগুলিতে আউটপুট নিতে পারেন - .obj ফাইলের সিএলআরের সংস্করণ। সমাবেশ লিঙ্কার ব্যবহার করে, আপনি ভিবি এবং সিএস কোড থেকে মডিউলগুলি নিতে এবং একটি একক সমাবেশ তৈরি করতে পারেন।

এটি তাত্ক্ষণিক প্রচেষ্টা হবে না এমন নয়, তবে সম্ভবত এটি কার্যকর হবে।


6
এখানে থমাস ফ্রয়েডেনবার্গের একটি ভাল লেখার আপ আছে
ডেভ এম

1
নমুনার আরও একটি উদাহরণ পাওয়া যায় : জুনফেং জাং এর দ্বারা পরিচালনা করা সি ++, সি ++ / সিএলআই এবং সি # কোড মেশানো । এটি প্রথম চালনার পরে এটি কাজ করতে পারে my আমার ভিজ্যুয়াল স্টুডিও ইনস্টলেশন থেকে ভিসি \ বিন \ vcvars32.bat। এটি আসলে বিভিন্ন প্রকল্পের মিশ্রণ হ'ল এক প্রকল্পের পরিবর্তে একটি সংসদ।
আর শেরুর্স

7

ওয়াকথ্রু: একটি ওয়েব সাইট প্রকল্পে একাধিক প্রোগ্রামিং ভাষা ব্যবহার করা http://msdn.microsoft.com/en-us/library/ms366714.aspx

ডিফল্টরূপে, App_Code ফোল্ডার একাধিক প্রোগ্রামিং ভাষার অনুমতি দেয় না। তবে, কোনও ওয়েবসাইটের প্রকল্পে আপনি ভিজুয়াল বেসিক এবং সি # এর মতো একাধিক প্রোগ্রামিং ভাষা সমর্থন করতে আপনার ফোল্ডার কাঠামো এবং কনফিগারেশন সেটিংস পরিবর্তন করতে পারেন । এটি ASP.NET কে একাধিক অ্যাসেমব্লি তৈরি করতে দেয়, প্রতিটি ভাষার জন্য একটি করে। আরও তথ্যের জন্য, এএসপি.নেট ওয়েব প্রকল্পগুলিতে ভাগ করা কোড ফোল্ডারগুলি দেখুন। ডেভেলপাররা সাধারণত ওয়েব অ্যাপ্লিকেশনগুলিতে একাধিক বিকাশকারী দলগুলিকে সমর্থন করে যা স্বাধীনভাবে কাজ করে এবং বিভিন্ন প্রোগ্রামিং ভাষা পছন্দ করে support


2

যদিও ভিজ্যুয়াল স্টুডিও এটি সমর্থন করে না (আপনি কিছু কৌশল করতে পারেন এবং এমএসবিল্ডকে উভয়ই সংকলন করতে পারেন তবে ভিজ্যুয়াল স্টুডিওর মধ্যে নয়), শার্পডেওফফ করে। আপনার উভয়টি একই সমাধানে থাকতে পারে (যতক্ষণ আপনি ভিজ্যুয়াল স্টুডিও পেশাদার এবং তারপরে চালাচ্ছেন), তাই আপনি যদি ভিজুয়াল স্টুডিওটি ব্যবহার করে চালিয়ে যেতে চান তবে সবচেয়ে সহজ সমাধানটি হ'ল আপনার ভিবি কোডকে একটি আলাদা প্রকল্পে আলাদা করে রাখা এবং সেভাবে অ্যাক্সেস করা।


1
শার্টডেভলফ কীভাবে এটিকে সমর্থন করে? আমি কেবল এটি চেষ্টা করেছিলাম এবং এটি সংকলন করে না। বিশেষ কিছু করার দরকার আছে কি?
এপিটকা

2

প্রকল্পটি ডান ক্লিক করুন। Asp.Net ফোল্ডার যুক্ত করুন চয়ন করুন। ফোল্ডারের অধীনে, দুটি ফোল্ডার তৈরি করুন যার মধ্যে একটি নাম রয়েছে ভিবিসিডফিলস এবং অন্যান্য সিএসকোডফায়ালস ওয়েব.কনফিগ একটি নতুন উপাদান সংকলনের অধীনে যুক্ত করুন

<compilation debug="true" targetFramework="4.5.1">
      <codeSubDirectories>
        <add directoryName="VBCodeFiles"/>
        <add directoryName="CSCodeFiles"/>
      </codeSubDirectories>
</compilation>

এখন, একটি cshtml পৃষ্ঠা তৈরি করুন। VBCodeFiles.Namespace.MyClassName ব্যবহার করে একটি রেফারেন্স যুক্ত করুন

@using DMH.VBCodeFiles.Utils.RCMHD
@model MyClassname

যেখানে মাইক্ল্যাশনেম উপরের নামস্থানটিতে পাওয়া একটি শ্রেণীর অবজেক্ট। এখন একটি সিএসটিএমএল ফাইল ব্যবহার করে রেজারে অবজেক্টটি লিখুন।

<p>@Model.FirstName</p>

দয়া করে নোট করুন, ডিরেক্টরি নাম = "সিএসকোডফিলস" অপ্রয়োজনীয় যদি এটি কোনও সি # প্রকল্প হয় এবং ডিরেক্টরিটি নাম = "ভিবিসিওডফায়ালস" অপ্রয়োজনীয় যদি এটি কোনও ভিবি.নেট প্রকল্প হয়।


2

হ্যাঁ এটি সম্ভব।এক সি এবং vb.net প্রকল্পগুলিকে একক সমাধানে যুক্ত করুন।

পদক্ষেপ 1: ফাইল-> অ্যাড-> বিদ্যমান প্রকল্প

পদক্ষেপ 2: প্রজেক্ট-> রেফারেন্স যুক্ত করুন>> প্রকল্পের dll বা এক্সী যা আপনি আগে যুক্ত করেছেন।

স্টিপি 3: vb.net ফর্মে যেখানে আপনি প্রকল্পের সি # ফর্ম-> আমদানির নেমস্পেস ব্যবহার করতে চান।


1

আপনি দেখতে পাচ্ছেন না যে আপনি কীভাবে সি # সংকলক (বা ভিবি সংকলক) দিয়ে কোনও প্রকল্প সংকলন করতে পারেন এবং সংকলকটির জন্য এটি ভুল ভাষায় ঝাপিয়ে না পড়ে।

আপনার সিবি কোডটি আপনার ভিবি প্রকল্প থেকে পৃথক প্রকল্পে রাখুন। আপনি এই প্রকল্পগুলিকে একই সমাধানে অন্তর্ভুক্ত করতে পারেন।


1

আপনার প্রতি ভাষা প্রতি একটি প্রকল্প দরকার। আমি যথেষ্ট আত্মবিশ্বাসী আমি এমন একটি সরঞ্জাম দেখেছি যা সমাবেশগুলি মার্জ করে, আপনি যদি সেই সরঞ্জামটি পান তবে আপনার ভাল হওয়া উচিত। যদি আপনার একই ক্লাসে উভয় ভাষা ব্যবহার করার প্রয়োজন হয় তবে আপনার এটির অর্ধেকটি ভিবি ডটকম লিখে লিখতে সক্ষম হওয়া উচিত এবং তারপরে বাকীটি ভি #.net ক্লাসে উত্তরাধিকার সূত্রে বাকী সি # তে লিখতে হবে।


1

অন্য প্রতিটি উত্তর প্রতিধ্বনিত হওয়ার ঝুঁকিতে, না, আপনি তাদের একই প্রকল্পে মিশাতে পারবেন না।

এটিকে বাদ দিয়ে, আপনি যদি সবে VB কে সি # তে রূপান্তর করা শেষ করেন তবে আপনি কেন ভিবিতে নতুন কোড লিখবেন?


2
কারণ আপনি আমার পোস্টে একটি ত্রুটি পেয়েছেন :) আমরা এখনও রূপান্তর শেষ করি নি।
ওয়েস পি

1

.NET 2.0 এর জন্য এটি কাজ করে। যদি আপনি সম্পর্কিত ভাষার কোডের সাথে অ্যাপ কোডের উপ ডিরেক্টরি তৈরি করেন তবে এটি একই প্রকল্পে উভয়ই সংকলন করে। এখনও হিসাবে, আমি এটি 3.5 এর মধ্যে কাজ করা উচিত কিনা তা সন্ধান করছি though


1

আপনি কেন কেবল আপনার VBকোডটি একটি লাইব্রেরিতে ( .dll) সংকলন করবেন না later আপনার কোড থেকে পরে এটি উল্লেখ করুন এবং এটিই। পরিচালিত যা উভয় dllsধারণ MSILকরে c#এবং vbসংকলিত হয়।


2
লিগ্যাসি ভিবি.এনইটি কোড থেকে আপনার নতুন সি # কোডের কোনও রেফারেন্সের প্রয়োজন হলে আপনি সম্পূর্ণ স্টাফ করবেন। বা তদ্বিপরীত, আপনি যেদিকেই যান না কেন এটি কেবল একমুখী রেফারেন্স।
রোমান স্টারকভ

0

অন্যরা যেমন বলেছে, আপনি উভয়ই একটি প্রকল্পে রাখতে পারবেন না। যাইহোক, যদি আপনার কাছে কেবল সি # বা ভিবি কোডের একটি ছোট টুকরা থাকে যা আপনি অন্য ভাষায় কোনও প্রকল্পে অন্তর্ভুক্ত করতে চান তবে স্বয়ংক্রিয় রূপান্তর সরঞ্জাম রয়েছে । এগুলি নিখুঁত নয়, তবে বেশিরভাগ জিনিস তারা বেশ ভাল করে। এছাড়াও, শার্পডেফের অন্তর্নির্মিত রূপান্তর ইউটিলিটি রয়েছে।


সেখানে আছে। আমি কেবল এটি স্তন্যপান করতে এবং ভিবিতে আমার যা প্রয়োজন তা কোড করতে পারি এবং পরে বাকী স্টাফ দিয়ে এটি রূপান্তর করতে পারি।
ওয়েস পি

0

না, একই প্রকল্পে নয় b তবে আপনি সেগুলি একই সমাধানে ব্যবহার করতে পারেন। যদিও আপনার যত্ন নিতে হবে যে আপনার কোডটি সিএলএস অনুগত। তার মানে আপনার অবশ্যই এমন কোনও কার্যকারিতা / বৈশিষ্ট্য ব্যবহার করা উচিত নয় যা অন্য ভাষার দ্বারা বোঝে না। উদাহরণস্বরূপ, ভিবি স্বাক্ষরবিহীন ints বুঝতে পারে না।


0

আমাদের দৃশ্যে এটি একটি একক সমাধানে একটি ভিবি.এনইটি প্রকল্প (উইন্ডোজ ডেস্কটপ অ্যাপ্লিকেশন)। তবে আমরা VB.NET- তে স্বাক্ষরিত / স্বাক্ষরযুক্ত পূর্ণসংখ্যার এবং এক্সএমএল আক্ষরিক এবং স্ট্রিং বৈশিষ্ট্যগুলির মতো সি # বৈশিষ্ট্যগুলির সুবিধা নিতে চেয়েছিলাম। সুতরাং বৈশিষ্ট্যগুলির উপর নির্ভর করে রানটাইমের সময় আমরা কোড ফাইলটি তৈরি করি, সম্পর্কিত রোজ্যালেন সংকলক (ভিবি / সিএস) ডিএলএল ব্যবহার করে সংকলন করি এবং বর্তমান সমাবেশে গতিশীলভাবে লোড করি। অবশ্যই আমাদের ডায়নামিক ডিএলএলগুলির নামকরণ, আনলোডিং, পুনরায় লোডিং, নামকরণ ইত্যাদির উপর কাজ করতে হয়েছিল এবং মেমরি ম্যানেজমেন্ট দ্বন্দ্ব এড়ানোর জন্য নামকরণের জন্য আমরা মূলত গতিশীল জিইউইডি ব্যবহার করেছি। এটি দুর্দান্ত কাজ করে যেখানে অ্যাপ্লিকেশন ব্যবহারকারীরা আমাদের ডেস্কটপ অ্যাপ্লিকেশন থেকে যে কোনও ডিবিতে সংযুক্ত হতে পারে, এসকিউএল কোয়েরি লিখতে পারে, সংযোগটি লিনকিউ সংযোগে রূপান্তর করতে পারে এবং লিনকুই কোয়েরিও লিখতে পারে যার জন্য সোর্স কোডটির গতিশীল বিল্ডিং প্রয়োজন হয়, ডিএলএলে সংকলন করা হয় এবং বর্তমান সমাবেশে সংযুক্ত হতে পারে।


-1

হ্যাঁ, আপনি উভয় ফাইলই কেবল ওয়েবসাইটে ওয়েবসাইটে যুক্ত করতে পারেন the প্রকল্পটি যদি ওয়েব অ্যাপ্লিকেশন হয় তবে এটি বিভিন্ন ধরণের ফাইলের অনুমতি দেবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.