Soru .NET uygulamam için bir komut dosyası arabirimi tasarlamaya ve uygulamaya nasıl başlarım?
.NET uygulamam için bir komut dosyası arabirimi tasarlamaya ve uygulamaya nasıl başlarım?
Var
VSTA (.NET eşdeğeri
VBA için
COM), ama anladığım kadarıyla, başvurumun her yüklemesi için bir lisans ücreti ödemek zorunda kalacağım. Bu açık bir kaynak
Uygulama bu yüzden işe yaramaz.
Ayrıca, örn. tercümanların gömülmesi (IronPython?), ancak bunun bir “nesne modelini” (aşağıya bakınız) dışsal (veya dahili) betiklere göstermesine nasıl izin vereceğini anlamıyorum.
Alt sorular:
- .NET'te komut dosyası arabirimi öyküsü nedir? Bunu .NET'te yapmak bir şekilde önemsiz midir?
- Örneğin. Uygulamamdaki bazı .NET nesneleri ve içerdiği nesneler çalışma zamanında dışarıdan erişilebilir olarak bildirilebilir mi?
- Nasıl olabilir dış betikler benim uygulamamıza erişir (nesne modeli aracılığıyla)?
Arka fon:
Bir zamanlar veri elde etmek ve analiz etmek için bir Macintosh uygulaması için oldukça etkili bir komut dosyası arayüzü tasarlayıp uyguladım. bir kütle spektrometresi (Mac os işletim sistemi, Sistem 7) ve daha sonra bir Windows uygulaması için bir COM arayüzü.
Her ikisi de bir “nesne modeli” ve sınıfları (özellikleri olabilir) ile tasarlandı. Bunlar aşırı sözcükler, ama
Bir betikleme arayüzünde bağlam nesne modeli, esas olarak belirli sınıfların nesnelerinin bir muhafaza hiyerarşisidir. Sınıfların özellikleri, içerdiği nesnelerin listesi vardır ve sadece veri değildir, aynı zamanda fiilleri de vardır (eylemler / yöntemler). Örneğin. Macintosh durumunda tanımlanan uygulama nesnesi, cihazda kullanılan voltajlar için özelliklere sahip bir edinme nesnesini içerebilir ve
fireLater fiil - dış komut dosyasından görüldüğü gibi.
Her iki durumda da, uygulamayı uygulamak için kullanılan programlama dilindeki sınıfların / nesnelerin, komut dosyası nesne modeli ile ilgisi olmadığını unutmayın. Macintosh davasında, betikleme arayüzünü uygulamak için kullanılan mekanizmalar Apple tarafından tanımlanmıştır. Apple tarafından nesne modelinin nasıl tasarlanacağı ile ilgili bazı standartlar da vardı. Örneğin, sınıflardaki belirli ortak özellikler için standart isimler.
Veya Microsoft Office uygulamalarında gösterilen COM arayüzlerinde olduğu gibi, uygulama nesnesinin belge listesine eklenmesi için kullanılabileceği gibi (bir belgenin GUI sunumunu oluşturma yan etkisiyle).
Harici komut dosyaları bir kapta yeni nesneler oluşturabilir ve herhangi bir zamanda hiyerarşinin içeriğinde gezinebilir. Macintosh'ta, örnek komut dosyaları, ör. AppleScript veya sınır.
Macintosh'ta, bir komut dosyası arabiriminin uygulanması çok karmaşıktı.
Bunun için destek Metroworks'C ++ sınıf kütüphanesi (isim şu an bana kaçıyor) çok daha basitleştirdi.
32
2018-03-08 16:51
Menşei
Cevaplar:
[DÜZENLEME: Buradaki yorumlarda da belirtildiği gibi, snippet'leri veya işlevleri barındıran iç komut dosyasını etkinleştirmeniz için önemli bir gereksiniminiz olduğunu varsayarak, birinin uygulamanızı özelleştirmesini sağlar. İnsanların uygulamanızı daha katı önceden tanımlanmış bir temelde uygulamanızdan çıkarmasına olanak tanıyan facaade]
IronRuby ve IronPython bunun için çok düzgün ve uygun (ama diğer cevapta, daha fazla altyapı tipi bir şey varsa, PowerShell uygun olabilir).
DÜZENLEME: Dahili komut dizilerini etkinleştirmek için diğer fikirler
- Windows Workflow Foundation'ı kullanarak (bunu faaliyetlere maruz bırakmak ve / veya iş akışlarının örneklerini barındıran)
- kullanma Spring.NET'in İfade Dili (tersine, doktora ve öğrenmesi kolay ama şaşırtıcı derecede güçlü)
2 Haziran 2011 DÜZENLEME: IronJS ayrıca uygun bir aday olabilir, onunla konuşan bir Hanselminutes var..
10
2018-03-24 13:53
Şuna baksana Güç kalkanı.
Scriptable olan basit Cmdlet'leri programlamanızı sağlar. Aynı zamanda hiyerarşik konteynırları da destekler (varsayılan olarak dosya sistemi, Kayıt Defteri, sertifika deposu vb.).
13
2018-03-08 17:05
Düşünmeni öneririm Dinamik Dil Çalışma Zamanı Bir betikleme arayüzünü uygulamak için bir strateji olarak. Detaylar:
DLR şu anda destekliyor IronPython ve IronRubyartı bir dizi başka dil uygulaması bulunabilir. Codeplex. Eğer uygulamanıza özel bir dil yaratmayı düşünüyorsanız, Bitwise Magazine iyi bir astardır. makale.
Dino Viehland'ın PDC09 oturumu Scriptable Uygulamalarını Oluşturmak için Dinamik Dilleri Kullanma izlemeye değer. Demo kodunu bulabilirsiniz İşte.
7
2018-03-29 20:10
Lua betik dili ücretsiz, çok sayıda ticari uygulamada kullanılır ve ücretsiz olarak kullanılabilen bir .NET uygulamasına kolayca gömülebilir LuaInterface gömülü yorumlayıcınızdaki komut dosyalarının kullanabileceği, uygulamanızdaki türleri ve yöntemleri göstermenize izin veren kitaplık.
Lua'nın bir C # uygulamasına nasıl yerleştirileceği hakkında bir öğretici bulunabilir İşte.
Düzenleme: Muhtemelen Lua'nın gömülü bir betik dili olacak şekilde tasarlandığına ve sonuç olarak yorumlayıcının son derece özelleştirilebilir olduğuna dikkat etmek gerekir. Ev sahibi uygulama, güvenlik modelinin bir parçası olarak yorumlama yeteneklerinin neredeyse her yönünü kısıtlayabilir; Örneğin. komut dosyalarının ağ bağlantılarını yapmasını veya dosyalara yazmasını vb. engelleme veya engelleme.
Ayrıca, sen hakkında sordun dış senaryo. Programınızı işlem dışı komut dosyaları için kullanılabilir hale getirmek, işlem dışı uygulamalarda kullanılabilir hale getirdiğiniz gibi yapılır: bir tür iletişim protokolü aracılığıyla standartlaştırılmış bir otomasyon arabirimini ortaya çıkararak. Windows'da, aynı makine çapraz işlem iletişimi için, genellikle COM olacaktır, ancak WCF, TCP remoting, RPC veya başka herhangi bir iletişim standardı da olabilir. Yapmayı seçtiğiniz şey, uygulamanızın nasıl oluşturulduğuna ve ne tür bir dış otomasyon yapacağınıza bağlıdır.
6
2018-03-31 00:18
kullandım CS-Senaryo İstediğiniz gibi bir şey yaratmak için. Benim durumumda, başvurumda bir arayüz tanımladım. Bir betik daha sonra bu arabirimi uygulamak için gerekliydi, böylece uygulamadan çalıştırılabilirdi. Uygulamam taranmış görüntüleri işlemekle ilgiliydi ve bu yüzden arayüzüm şunun gibi bir şeye benziyordu:
public interface ICustomModule
{
void ProcessBatch(IBatch batch)
}
Bu şekilde, komutum, uygulamamda tanımladığım nesne modeline erişebildi (benim durumumda IBatch yoluyla). İyi bir şey, geliştirme sırasında komut dosyası için normal bir Sınıf Kitaplığı projesini kullanabildiğim: IntelliSense, hata ayıklama ... Kesin ayrıntıları hatırlamıyorum ama temelde uygulamasında uygulamayı kullanmaya
başvurulan bir komut dosyası yerine sınıf kütüphanesi.
Ayrıca, komut dosyalarının yapılandırılmasına izin veren bir ek arayüz daha yaptım: Bir betik, bir özellik kılavuzunda uygulamam tarafından görüntülenen bir özellikler kümesi tanımlayabilir. Sanırım bu sürümü kullandım İşte Bu zamanda biraz daha esnek görünüyordu. Bu sayede kullanıcıların sadece betiği yapılandırmasına izin veremezsiniz, aynı zamanda tanımlamalar, seçimler, varsayılan değerler şeklinde de yardım edebilirsiniz ... Özellik ızgarası oldukça genişletilebilir: Bir durumda özel bir senaryo gösterecek bir senaryo vardı. Bazı karmaşık ayarları tanımlamak için form.
Düzenle:
Tabii ki uygulamada "hata ayıklama" sınıf kütüphanesi için bir referans yoktu. Sadece meclisi yüklemeliyim ...
5
2018-03-28 09:38
Ücretsiz, kolay uygulanır .AĞ komut dosyası dili, C # 'ya bir göz atın.
Görmek cevabım benzer bir soruya.
Verileri açığa çıkarmak için, bir .NET dili nasıl göründüğüne bakmanız, ilgili sınıfları halka bağlamak ve yapmak için programınızı meclislere eklemeniz gerekir.
5
2018-03-24 11:54
Bunun ihtiyaçlarınızı karşılayacağından emin değilim, ancak yansıma yoluyla C # kodunu derleyebilir ve çalışma zamanında çalıştırabilirsiniz (örnek kod İşte).
Böylece senaryoyu yazabilirsin. C # ve sonra "anında" derlemek ve doğrudan uygulamanızın bağlamında çalıştırın. Tabii ki güvenlik konularını akılda tutmalısınız, ancak eğer betiklere güveniyorsanız, bu sizin için işe yarayacaktır ve komut dosyalarınız için güçlü bir yönetilen dil kullanmanın yararlarından yararlanabilirsiniz.
Yüksek performansa ihtiyacınız varsa veya binlerce komut dosyası çalıştırıyorsanız, çok yavaş olabilir.
4
2018-03-24 11:46