16

SorunuAdım adım, Visual Studio 2010'daki belirli bir türdeki her dosya için özel bir oluşturma adımı nasıl ekleyebilirim?

  1. Ben görsel bir stüdyo 2010 projesi özel dosyaların bir grup var.
  2. Bu özel dosyalar üzerinde, değiştiklerinde bir araç çalıştırmam gerekiyor.
  3. Araç, varolan .cpp dosyaları tarafından dahil edilen .h dosyaları oluşturur.
  4. Aracın, oluşturma işleminin bir parçası olarak çalışmasını istiyorum.
  5. Görsel stüdüsten çalışması gerekir, ancak ideal olarak bir msbuild işleminin parçası olarak da çalışabilir.

Mevcut standart altı çözümler her dosya üzerinde

, bunu eklemek her zaman, özel Build'a sonra, dosya ayarlarına gidin Custom Aracı kurmak için Öğe Türü ayarlayabilir ve Takım diyaloğu, komut satırı parametrelerini ayarlayın, (sabit kodlanmış) çıktıları ayarlayın ve (sabit kodlu) ek bağımlılıkları ayarlayın.

Açıkçası, bu kötü bir çözümdür, çünkü her özel tipte yeni bir dosya eklediğinizde önemsiz ve hatasız bir iş miktarıdır.

uzatma .foo ne olursa olsun dosya için, bu alet bar.exe çalışır Görsel stüdyo kurmak

istenen çözüm, ne zaman .foo dosyası değişiklikleri, bu CPP kodu derler önce.

şeyler ben Buna dayanarak

çalıştılar: http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx Bir .targets ve .xml dosyasını kurmak için çalıştı. Bununla birlikte, görsel bir stüdyosunda görünecek şekilde yeni bir Öğe Türü yaratmanın nasıl bir yolunu bulamıyorum, ya da .foo türündeki her dosyaya nasıl büyülü bir şekilde uygulanacağını anlayamıyorum. Bunun üzerine, benim bar.exe aracımı çağırma eylemini açıklayan herhangi bir şey için herhangi bir bağlantı nerede olduğunu anlayamadım.

Mevcut Öğe Türlerini izlemek ve bunların gerçek oluşturma eylemlerine nasıl dönüştürüleceğini belirlemek için tüm görsel stüdyonun xml/target dosyalarını aramayı denedim. ProjectItemsSchema'da tanımlanan bir grup olduğu ItemType'ın duvarında her zaman sona erer, ancak nerede uygulandığını veya bunları nasıl uygulayabildiğimi bulamıyorum.

MSDN'in belgeleri tam bir başarısızlık oldu ve sanırım, potansiyel olarak ilgili her sayfayı on kez boş bir şekilde okudum. Visual Studio 2008

, bu gibi görünen bir .rules dosyası ile çalışan bu tür şeyleri vardı:

<?xml version="1.0" encoding="utf-8"?> 
<VisualStudioToolFile 
Name="Foo Build Rules" 
Version="8.00" 
> 
<Rules> 
    <CustomBuildRule 
     Name="FooBuild" 
     DisplayName="FooGen" 
     CommandLine="..\..\tools\FooGen.exe [inputs]" 
     Outputs="$(InputName).h" 
     AdditionalDependencies="*.foo" 
     FileExtensions="*.foo" 
     ExecutionDescription="Generating Foos..." 
     > 
     <Properties> 
     </Properties> 
    </CustomBuildRule> 
</Rules> 
</VisualStudioToolFile> 

Ancak bu işlevselliği 2010 yılında kullanımdan kaldırıldı ve ben anlamaya geçiremedi yeni sistemle nasıl çoğaltılabiliriz.

Yardım?

+0

Bunu kontrol ettiniz mi? http://msdn.microsoft.com/en-us/library/xfsbz6cw(v=vs.100).aspx – hege

+0

Onlara ben okumak gerekir varsayalım Artık 2008. –

+0

çalışmak ne 2008 yılında kullanıyordum vardır çok bu bir: http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-custom-build-rule.aspx. Gözlerimi yakalayan şey, buna göre, bir .props dosyasına ihtiyacın var, belki de eksik olan budur. Yine de denemedim .... – hege

cevap

7

Proje dosyanıza özel bir ItemGroup ekleyerek başlayın.

altındaki Beğen:

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
     <Message>Copying readme...</Message> 
     <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
     <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
    </ItemGroup> 

Sonraki özel hedef oluşturmak ve inşa sürecinde size inşa sürecinde özel hedefleri yayınlanmasını istediğiniz tanımlar.

aşağıdaki bağlantılara adım detaylı ve adım daha açıklar.

Bu yardımcı olur umarım.

Walk-through: Using MSBuild to Create a Visual C++ Project

How to: Add Custom Build Tools to MSBuild Projects

Note

: Mevcut sürümde, IDE yeni kurallar oluşturulmasını desteklemez. Bu nedenle, daha önceki bir Visual C++ sürümü kullanılarak oluşturulan bir projeden bir kural dosyasını kullanmanın en kolay yolu, projeyi geçerli sürümüne geçirmektir.

+0

Neden aşağı oy? – SoftwareCarpenter

+0

Bu örnekte 'CustomBuild 'adımı sadece bir dosyaya,' faq.txt 'için geçerlidir. OP, '* .foo' gibi birden çok dosya üzerinde çalışan bir' CustomBuild' adımı istedi. beklendiği gibi –

+1

Sadece takip etmek, 'CustomBuild' da bu yüzden' kullanarak, joker karakterler ile kullanılabilir 'işleri . Teşekkür ederim. –