启动时删除引用项目中的内容

时间:2014-07-07 16:39:21

标签: c# visual-studio-2013

我在启动应用程序时遇到从输出目录中删除内容的问题。

在ProjectA中,我没有内容文件,只有与应用程序相关的内容。

在ProjectB中我有文件 Resources / js / x.js Resources / js / y.js

在ProjectC中,我有文件 Resources / js / z.js

所有文件都已设置为"内容"和"始终复制"。

ProjectA引用ProjectB和ProjectC。

当我构建/重建/清理+重建解决方案时,文件 x.js y.js z.js 结束在ProjectA的输出目录中。正如它应该;一切都很好。

但是当我点击启动ProjectA时, z.js 文件从输出目录中删除。

我没有预制/后期制作活动,而且#34; Build"标签日志。应用程序中没有代码可以删除文件;即使有,也没有理由删除该文件的原因。

有人可以帮我弄清楚发生了什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先,我创建了一个包含三个项目的解决方案,ProjectA引用了ProjectB和ProjectC,但是无法重现您的问题。我看到了几种可能的解决方案。

  1. 您可以将x.js,y.js和z.js files as links添加到ProjectA中,然后设置"复制到输出目录"财产到"永远复制"在ProjectA中。通过这种方式,ProjectA将强制复制到输出目录,而不是依赖于引用的项目来代表它复制文件。

  2. 在VS2013之外运行ProjectA.exe并在启动后使用Debug-> Attach to Process ...

  3. 连接调试器
  4. (在你的情况下并不是真的推荐,而是一个选项)你可以将文件切换为嵌入式资源,然后在运行时使用以下代码将它们写入磁盘:

    static void Main(string[] args)
    {
        var assembly = Assembly.GetExecutingAssembly();
        var resourceName = "readEmbeddedResourceFile.Resources.MyFile.txt";
    
        using (Stream stream = assembly.GetManifestResourceStream(resourceName))
        {
            if (null != stream)
            {
                byte[] b1 = new byte[stream.Length]; // creat an array to hold the file
                stream.Read(b1, 0, (int)b1.Length); // read the file from the embedded resource
                File.WriteAllBytes("MyFile.txt", b1); // write the file to the current execution directory
            }
        }
    }
    
  5. 由于Start通常构建任何过时的项目,这个部分构建是否有可能导致文件被删除?您可以浏览选项 - >项目和解决方案 - >构建并运行,以查看其中一个设置是否有助于解决问题。这是我的样子(没有文件删除) enter image description here