2011-01-26 7 views
0

私の機能のtemplate.xmlファイルの1.0.0.0バージョンこのように見えた:次のようにFeatureUpgradingは最新のプロパティ値を使用する予定ですか?

<?xml version="1.0" encoding="utf-8" ?> 
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Properties> 
    <Property Key="AvailableWebTemplates" Value="MPS#0;MPS#1;MPS#2;MPS#3;MPS#4" /> 
    </Properties> 
</Feature> 

新しいバージョン1.1.0.0は、次のとおりです。

<?xml version="1.0" encoding="utf-8" ?> 
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"> 
<UpgradeActions> 
    <VersionRange BeginVersion="1.0.0.0" EndVersion="1.1.0.0"> 
    <CustomUpgradeAction Name="UpgradeTo1v1"/> 
    </VersionRange> 
</UpgradeActions> 
    <Properties> 
    <Property Key="AvailableWebTemplates" Value="MPS#0;MPS#1;MPS#2;MPS#3;MPS#4;STS#2" /> 
    </Properties> 
</Feature> 

templatesの値は、まだMPS#0;MPS#1;MPS#2;MPS#3;MPS#4ですFeatureUpgradingで次のコードが実行されたとき:

SPFeatureProperty property = properties.Feature.Properties["AvailableWebTemplates"]; 
string templates = property.Value; 

なぜ更新されたプロパティ値が得られませんか?これはそうなるのでしょうか?

答えて

0

実際には次のようになります。 機能には1つの定義とn個のインスタンスがあります。 FeatureUpgradingのコードは、インスタンスをアップグレードするために使用されます。

xmlのプロパティは、機能定義を更新し、実行中のインスタンスは更新しません。

properties.Feature.Properties["MyProp"]機能定義のプロパティの値を取得し、インスタンスproperties.Definition.Properties["MyProp"]を実行しているのプロパティ値を取得します。

+0

興味深い。ですから、これはFeatureUpgradedではなくFeatureUpgradingなので、インスタンスを定義と比較して何が違うのかを見ることができます。 私が最初にこれを動作させたのは、CustomUpgradeActionにParametersセクションを追加することでした。私はそれが好きかどうかを決めていない。私は複数のバージョンがある場合、パラメータに値を持たせることで、フィーチャーがどのようにアップグレードされたかの履歴がわかります。しかし、私はすでに私にそれを教えるソースコントロールを持っているので、私はそれを持ち出してプロパティと一緒に行くと思う。定義。ありがとう! –

関連する問題