0

私は過去 4 時間ほどを費やして、SharePoint 展開パッケージ (wsp ファイル) をコンパイルするときに、ワイルドカードで指定されたファイルが常にパッケージに含まれるとは限らない理由を理解しようとしました。「常に」は、「クリーンビルドでは決してない」および「通常、それ以外」であることが判明しました。実際には、ワイルドカード仕様で指定されたファイルは、プロジェクトがロードされた時点では存在しませんでした(それらはビルドの一部に配置されています)。これが問題の核心であることが判明しました。 Visual Studio または MSBuild (両方で発生) が csproj ファイルをロードするときにのみ発生します。その時点でファイルが存在しない場合、ビルドの一部としてそこに配置されたファイルは、ファイル パッケージに含まれるものと見なされます。

最後に、必要なファイルをセカンダリ プロジェクト (プライマリ プロジェクトが依存するプロジェクト) のビルドによってそこに配置することで、問題を部分的に解決することができましたが、これでも VS で初めてロードしたときに正しく動作しません。ソリューション。基本的に、ソリューションを一度ビルドしてから、閉じて再度開き、すべてのファイルを含めるために再度ビルドする必要があります。MSBuild は動作が異なるようで、特定のプロジェクトのビルドを最初に開始するときにのみワイルドカードを展開します。

私が知りたいのは、これを行うためのより良い方法があるかどうかです-たとえば、.spdataファイルにワイルドカードを使用することは可能ですか、または.wspファイルに含まれるディレクトリ全体を指定する他の方法があります(宛先ディレクトリ名を指定する機能を備えた)?

4

1 に答える 1

0

私があなたを正しく理解していれば、あなたの問題は msbuild のファイル アイテムの評価に起因しています。

パッケージングターゲット内に新しいアイテムグループを指定すると、ターゲットにステップインしたときにのみ評価されます。次に例を示します。

    <Target Name="ConfigurationChanges" AfterTargets="Build">
        <ItemGroup>
            <ConfigFiles Include="$(DeliveryFolder)\**\*.spdata"/>
        </ItemGroup>
    </Target>
于 2015-07-30T11:18:03.247 に答える