代码之家  ›  专栏  ›  技术社区  ›  Cameron Peters

创建仅包含内容文件的VS 2010项目

  •  1
  • Cameron Peters  · 技术社区  · 16 年前

    我有一些内容文件,我想在VisualStudio中的许多项目之间共享。

    4 回复  |  直到 16 年前
        1
  •  4
  •   Cameron Peters    16 年前

    感谢所有花时间就如何解决这个问题提出建议的人。

    我有一个名为“ZipDictionary”的自定义任务,我将要编译的所有文件累积到一个名为dictionarycomfile的项目组中。我的目标“FixGetCopyToOutputDirectoryItems”在“GetCopyToOutputDirectoryItems”之前执行。我没有在那里进行实际编译,因为这个目标可以通过引用项目多次调用,这会影响性能。目标执行一些转换以获取编译后的文件名,然后返回所有文件的完整路径,因为从引用项目调用copy时,相对路径将不起作用。

    <ItemGroup>
      <DictionaryCompile Include="Dictionaries\it-IT.dic">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </DictionaryCompile>
    </ItemGroup>
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    <UsingTask TaskName="ZipDictionary" AssemblyFile="..\LogicTree.DictionaryCompiler\bin\Debug\LogicTree.DictionaryCompiler.dll"/>
    <Target Name="BeforeCompile">
      <Message Text="Files @(DictionaryCompile)" Importance="high" />
      <ZipDictionary DictionaryFiles="@(DictionaryCompile)" OutputDirectory="$(OutputPath)">
        <Output TaskParameter="OutputFiles" ItemName="DictionaryOutputFiles" />
      </ZipDictionary>
    </Target>
    <Target Name="FixGetCopyToOutputDirectoryItems" BeforeTargets="GetCopyToOutputDirectoryItems">
      <ItemGroup>
        <_DictionaryCompile Include="@(DictionaryCompile->'$(OutputPath)Dictionaries\%(FileName).ltdic')" />
      </ItemGroup>
      <AssignTargetPath Files="@(_DictionaryCompile)" RootFolder="$(MSBuildProjectDirectory)\$(OutputPath)">
        <Output TaskParameter="AssignedFiles" ItemName="_DictionaryCompileWithTargetPath" />
      </AssignTargetPath>
      <ItemGroup>
        <AllItemsFullPathWithTargetPath Include="@(_DictionaryCompileWithTargetPath->'%(FullPath)')" Condition="'%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" />
        <_SourceItemsToCopyToOutputDirectoryAlways Include="@(_DictionaryCompileWithTargetPath->'%(FullPath)')" Condition="'%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='Always'" />
        <_SourceItemsToCopyToOutputDirectory Include="@(_DictionaryCompileWithTargetPath->'%(FullPath)')" Condition="'%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" />
      </ItemGroup>
    </Target>
    
        2
  •  3
  •   Sky Sanders    16 年前

    A 可能的解决办法是

    • 在VS中,在应共享此内容的每个项目中,单击鼠标右键 add existing item ,浏览到所需的项目,选择,然后单击 add add as link . 在项目中,您会注意到文件添加了“快捷方式”覆盖。

    • 在项目中,选择新添加的链接并单击鼠标右键->属性并选择buildaction:content,Copy To Output Directory:Copy Always。

    我将这种技术用于SQL脚本和部分配置文件(使用configSource)等方面,取得了巨大成功。这使我能够在单个位置对这些文件进行更改,并确保它们将在整个解决方案中得到应用。

    希望有帮助。

        3
  •  1
  •   Community Mohan Dere    9 年前

    my answer to "Is there a way to automatically include content files into asp.net project file?" .

    它允许共享您的内容,但您不能在VS中接触文件夹或其内容,因为这会中断递归路径。

    当然,您可以在多个解决方案/项目中重用它。

        4
  •  0
  •   Mark Redman    16 年前

    我们做了一些类似的事情,我们有“…ReleaseBuilds”引用dll和特定项目所需的内容。编译会将所有内容复制到bin debug文件夹,并确实会创建空程序集。

    在visualstudio中,“…RealeaseBuild”(在项目属性中)中有一个生成后事件,它复制/删除或运行批处理文件,以确保我们拥有所需的所有文件(配置、服务等),并删除空程序集。

    HTH公司