【问题标题】:Visual Studio : build C# project to custom directoryVisual Studio:将 C# 项目构建到自定义目录
【发布时间】:2014-02-16 04:12:16
【问题描述】:

我有一个 C# 项目。构建完成后,需要部署 4 个文件:

  1. MyProj.exe
  2. MyProj.exe.config
  3. MyProj.pdb
  4. MyProj.XML

这些文件和 MyProj 的引用 dll 在输出目录中,bin/Release

我要自定义输出目录(部署遵循这个目录层次):

+bin/Release
|--MyProj.exe
|--MyProj.exe.config
|--MyProj.pdb
|--MyProj.XML
|--+lib
|--|--<MyProj's refer dll>
|--+plugin
|--|--<empty directory. before deployment, I'll copy into there manually>
|--+Help
|--|--<empty directory. before deployment, I'll copy into there manually>

(当然MyProj.exe.config中还有probingPath="lib"。)

到目前为止,我都是手动创建目录的。但我想自动执行此操作。有没有办法通过 Visual Studio 自动执行此操作?

我想将 MyProj 部署到 ClickOnce。我可以将此目录层次结构(包含我在 plugin/Help/ 中手动复制的文件)部署到 ClickOnce 吗?

【问题讨论】:

    标签: visual-studio msbuild visual-studio-2013 clickonce


    【解决方案1】:

    我的建议是在解决方案文件中创建您需要的所有文件夹(这样它们将由 Visual Studio 管理)-然后设置单击这些文件夹内文件的“属性”,并将 Build Action 设置为ContentCopy to Output DirectoryCopy if Newer:

    我一直使用这个技巧来确保在BIN 文件夹中创建文件和文件夹,以便以后可以使用它们。

    这样做的另一个好处是,您无需修改​​构建步骤即可让 ClickOnce 处理这些文件 - 只需转到项目属性 -> 发布 -> 应用程序文件 - 并将 Publish Status 设置为“包含" 用于您需要的文件。它们将与您的应用一起部署。

    【讨论】:

      【解决方案2】:

      您可以通过在 MSBuild 中调用 Copy 任务来自动执行此操作。您可以通过在右键单击并选择“卸载”后在 Visual Studio IDE 中打开 .csproj 来做到这一点。然后再次右键单击并编辑.csproj 文件,它将以文本/XML 格式显示.csproj 文件。

      然后粘贴类似以下内容并将其更改为您的特定要求。注意目标是AfterBuild

      <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
          <PropertyGroup>
              <YourDestinationDirectory>..\SomeDestinationDirectory</YourDestinationDirectory>
              <YourSourceDirectory>..\SomeSourceDirectory</YourSourceDirectory>
          </PropertyGroup>
      
          <Target Name="AfterBuild">
              <CreateItem Include="$(YourSourceDirectory)\**\*.*">
                  <Output TaskParameter="Include" ItemName="YourFilesToCopy" />
              </CreateItem>
      
              <Copy SourceFiles="@(YourFilesToCopy)"
                      DestinationFiles="@(YourFilesToCopy->'$(YourDestinationDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" />
          </Target>
      </Project>
      

      您可以通过打开 Visual Studio 命令提示符并针对您的项目文件运行 MSBUILD.exe 轻松测试您的 MSBUILD 更改。一个一个地做,这样你就可以立即发现任何错误。

      【讨论】:

      • “混乱”默认输出目录是一个滑坡。所以是的,我非常喜欢 shiva 的 msbuild 方法。或者至少是一个“构建后事件”来移动文件。当我看到“..\..\Something”的输出目录时,我畏缩......
      • 当我看到有人更改 $(OutputDir) 时,我总是想“你以为你是谁?!TFS?!”
      【解决方案3】:

      在 Visual Studio 中,您可以右键单击项目并转到属性。在项目属性中单击“构建”选项卡。在这里可以自定义您的输出位置。同样在“构建事件”选项卡下,您可以使用命令来执行准备或构建后工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        • 2015-07-08
        • 2021-08-08
        • 2021-11-01
        相关资源
        最近更新 更多